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 et swap -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/swapfilename
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/swapfilename
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 swapfilename
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