Swap sous Unix, généralités et spécificités Solaris

Principe des partitions de swap

Généralement, sous Unix :

  • un processus dispose d'un espace mémoire supérieur à la RAM, il s'agit de la mémoire virtuelle.
  • l'espace mémoire est découpée en segments de taille donnée, les pages. Les pages d'un processus en RAM au fur et à mesure des besoins sont chargées : il s'agit du phénomène de pagination.
  • lorsque la RAM sature et que des pages doivent être chargées, les vieilles pages sont éliminées de la RAM et copier sur disque pour charger les nouvelles pages : il s'agit du swapping.

Il est impératif de disposer d'une partition de swap.

La partition de swap est créée comme les autres partitions régulières. En revanche pour la partition de swap, il n'est pas nécessaire de faire appel à la commande newfs.

Activation de partitions de swap au boot (swapon -a)

Les scripts de démarrage activent automatiquement le swap avec la commande swapon -a qui consulte le fichier /etc/fstab ou équivalent.

Pour Linux : /etc/fstab

/dev/hda2   none   swap    sw   0   0     # Linux

Pour Solaris : /etc/vfstab

# device           device    mount    fs       fsck    mount      mount 
# to fsck          to fsck   point    type     pass    at boot    options
# 
/dev/dsk/c0t0d0s1  -         -        swap     -       no         -

Taille du swap (free etswap -s)

Par tradition, la taille du swap est fixée à trois fois la RAM disponible. En cas de taille de swap insuffisante, de gros problèmes se présentent :

% ./programme
  
No swap space available
Sep 15 17:07:43 cerise /kernel: pid 335 (z), uid 0, was killed:
out of swap space

Diverses commandes sont disponibles pour connaître la taille du swap.

Linux : commande free

% free

        total        used       free        shared       buffers
Mem:   129488      121716       7772          4136        104824

Swap:  259768           0     259768

Solaris : swap -l et swap -s

% /usr/sbin/swap -l
swapfile             dev           swaplo      blocks       free
swapfs               -             0           139408       123280
/dev/dsk/c0t3d0s1    32,25         8           98488        98488

% /usr/sbin/swap -s
total: 8264k bytes allocated + 3520k reserved = 11784k used, \
52632k available

Fichiers de swap (mkfile, dd)

Il est possible d'utiliser des fichiers pour swapper au lieu de partitions mais tous les systèmes Unix ne le permettent pas toujours.

Avantages :

  • en cas de swap insuffisant, il est simple de créer un fichier de swap

Inconvénients :

  • une fois ajouté au swap, il est impossible de faire machine arrière, pour supprimer le fichier de swap sur la plupart des OS Unix, il est impératif de rebooter.

2 méthodes pour générer un fichier de swap :

Commande mkfile :

mkfile 50m swapfile

Commande dd :

% dd if=/dev/zero of=swapfile bs=1m count=50
     50+0 records in
     50+0 records out
     52428800 bytes transferred in 3.533640 secs (14837052 bytes/sec)

Pour finalement indiquer qu'il s'agit d'un fichier de swap :

swapon /chemin/vers/swapfile

Swap sous Solaris 2.8

Comment l'espace swap est alloué sous Solaris

Initialement à l'installation d'un système solaris, de l'espace swap est allouée automatiquement sur des slices de disques. Les tailles par défaut sont récapitulées dans le tableau qui suit :

Mémoire physique du système (Mb) Espace swap appliquée par défaut (Mb)
16-63 32
64-127 64
128-511 128
> 512 256

Après l'installation du système, les slices de swap sont listés dans le fichier /etc/vfstab et activés par le script /sbin/swapadd au démarrage du système.

Plannification de l'espace swap

Les facteurs les plus importants dans la détermination de l'espace swap sont les besoins des applications soft. Par exemple, les applications consommatrices (simulateurs, données géologiques ...) peuvent consommer jusqu'à 100-200 Mo d'espace swap.

Pour le support des applications, lorsque le fournisseur d'une application ne peut apporter les spécifications concernant l'espace swap :

  • 1 Mb pour des applications triviales (xterm...)
  • 2-3 Mb pour les applications légères (mail, calendrier...)
  • 20-50 Mb pour les applications plus lourdes.

Dans le doute, il est d'usage d'allouer 50 à 100% de la mémoire physique du système.

Monitoring des ressources swap (swap -l et swap -s)

La commande /usr/sbin/swap est utilisée pour manager les ressources swap. Les deux options -l et -s sont utilisées pour l'affichage des informations sur les ressources swap.

La commande swap -l affiche l'identification des zones de swap. Les devices ou fichiers de swap sont listés en dessous de la colonne swapfile :

% swap -l
  swapfile               dev       swaplo       blocks      free
  /dev/dsk/c0t2d0s1      32,17     8            205624      192704

La commande swap -s permet de monitorer les ressources swap :

% swap -s
total: 10492k bytes allocated + 7840k reserved = 18332k used, 21568k available

La somme user + available représente l'espace de swap total sur le système, espace qui inclut une portion de la mémoire physique et les devices de swap (ou fichiers).

La quantité de swap utilisé et disponible est un bon moyen de monitorer le système de swap. Lorsque la performance d'un système est ralenti, vérifier la quantité de swap disponible.

La commande swap -l affiche les informations en blocs de 512 octets alors que la commande swap -s affiche les informations en blocs de 1024 octets. Si les informations blocks de la commande swap -l sont converties en blocs de 1024 octets, cette valeur est forcément inférieure à la valeur used + available de la commande swap -s car la portion de mémoire physique dédiée au swap n'est pas prise en compte avec la commande swap -l.

Description de la sortie de la commande swap -s :

  swap -s
Bytes allocated Quantité d'espace swap exprimées en blocs de 1024 octets couramment allouée et utilisée.
Reserved Quantité d'espace swap exprimée en blocs de 1024 octets non allouée mais réservée par la mémoire pour une future utilisation.
Used Quantité d'espace swap exprimée en blocs de 1024 octets allouée ou réservée.
available Quantité d'espace swap exprimée en blocs de 1024 octets disponible pour une future réservation et allocation.

Ajout d'espace swap supplémentaire

La méthode la plus simple pour ajouter de l'espace swap supplémentaire consiste à utiliser les commandes mkfile et swap sur une partie d'un file system UFS ou NFS.

Les méthodes alternatives pour ajouter de l'espace swap impliquent de repartitioner un disque existant ou d'ajouter un nouveau disque.

Les étapes ci-dessous sont nécessaires pour créer un fichier de swap :

  • création d'un fichier de swap avec la commande mkfile
  • activation du fichier de swap avec la commande swap
  • ajout d'une entrée dans le fichier /etc/vfstab pour une activation automatique au démarrage.

La commande mkfile

La commande mkfile créé un fichier avec des 0. La taille du fichier est spécifiée en bytes (par défaut) ou bien en Kb, blocks ou Mb en utilisant respectivement les suffixes k, b ou m.

mkfile nnn[k|b|m] filename

Création et activation d'un fichier de swap

En tant que root :

1) Créer le fichier de swap :

mkfile nnn[k|b|m] filename

2) Activer le fichier de swap :

% /usr/sbin/swap -a /path/swap-filename

3) Ajouter une entrée dans le fichier /etc/vfstab qui spécifie la localisation du fichier de swap et l'indication du flag de swap pour ce fichier :

/path/filename    -     -     swap        -     no    -

4) Vérifier en dernier lieu l'implémentation de ce fichier de swap :

% /usr/sbin/swap -l

% mkdir /files
% mkfile 24m /files/swapfile
% swap -a /files/swapfile

Une entrée est ajoutée dans le fichier /etc/vfstab

/etc/vfstab
/files/swapfile - - swap - no -
% swap -l
      swapfile           dev      swaplo     blocks     free
      /dev/dsk/c0t2d0s1  32,17    8          205624     192704
      /files/swapfile    -        8          40952      40952

Suppression d'un fichier de swap

Dans un contexte où l'espace swap supplémentaire n'est plus nécessaire, il est possible de supprimer ce dernier.

1) En tant que root, la commande swap -d supprime un espace de swap :

% /usr/sbin/swap -d /path/swap-filename

Le fichier de swap est ainsi retiré de la liste des fichiers de swap mais le fichier physique lui n'est pas supprimé.

2) Editer ensuite le fichier /ect/vfstab et supprimer l'entrée pour le fichier de swap en question supprimé.

3) Supprimer le fichier de swap pour une utilisation ultérieure :

% rm swap-filename

Si l'espace de swap est un fichier, il suffit simplement de supprimer le fichier. Dans le cas où l'espace de swap est un slice d'un disque, créer un nouveau file system sur ce slice et monter le file system.

Exemple :

% swap -d /files/swapfile
% rm /files/swapfile
% swap -l
      swapfile           dev        swaplo        blocks       free
      /dev/dsk/c0t2d0s1  32,17      8             205624       19272