Optimiser l’utilisation du SWAP sur Ubuntu

janvier 26, 2013 · Posted in Divers, Ubuntu · Comment 

Comme nous le savons, le swap est une zone du disque dur dédiée à la mémoire virtuelle.
Le Swap détient temporairement les pages de mémoire qui sont inactives.
Il est utilisé lorsque le système décide qu’il a besoin de mémoire physique (RAM) pour les processus actifs et qu’il n’y a pas suffisamment de mémoire physique disponible.
Les pages inactives dans la mémoire physique sont alors déplacées vers le swap, libérant ainsi la mémoire physique pour d’autres usages.

Mais les disques sont beaucoup plus lent que la RAM. Les échanges en zone de Swap peuvent donc conduire à des temps de réponse plus lents si les processus sont déplacés de manière trop agressive.
Nous allons alors contrôler l’utilisation de la zone de swap pour accélérer Ubuntu s’il ya une RAM suffisante.

Le paramètre qui contrôle cet échange est : swappiness.
La valeur que ce paramètre peut prendre varie de 0 à 100.

  • 0 indique au noyau de maintenir les processus en mémoire physique le plus longtemps que possible
  • 100 indique au noyau qu’il doit se comporter de manière agressive et « swapper » les processus aussi vite que possible

La valeur par défaut du paramètre swappiness dans Ubuntu est de 60.
Pour améliorer la performance globale d’une Ubuntu Desktop est 10.

Comment modifier ce paramètre ?

Ultra simple :

Ouvrez un terminal et saisissez

cat /proc/sys/vm/swappiness

Pour modifier la valeur de manière temporaire :

sudo sysctl vm.swappiness=10

Pour la modifier de manière permanente, éditez le fichier sysctl.conf

sudo vi /etc/sysctl.conf

puis cherchez la variable vm.swappiness
et fixez-la à 10

vm.swappiness=10

Enregistrez le fichier, et zou, un reboot !

Le swap ou l’art d’échanger…

février 9, 2011 · Posted in GNU/Linux · 1 Comment 

Le Swap est une des notions importantes de nos systèmes. Une bonne configuration du swap peut grandement améliorer le comportement de votre système… Mais une mauvaise utilisation peut effondrer votre machine.

Voici donc quelques informations pour vous aider à y voir plus clair.

GNU/Linux divise sa mémoire physique, la RAM (Random Access Memory), en « pages ».

Le Swap est le processus par lequel une page de mémoire est copiée dans un espace prédéfini sur le disque dur afin de libérer la mémoire physique de la quantité de occupée par cette même page.

La taille combinée de la mémoire physique et de cet espace de Swap représente la quantité de mémoire virtuelle.

Le Swap est nécessaire pour deux raisons importantes.

Tout d’abord, lorsque le système nécessite plus de mémoire que ce qui est physiquement disponible, le noyau swap afin de libérer de la mémoire physique et la donner à une application qui en a besoin immédiatement.

Mais la raison majeure de la légitimité du swap vient d’un effet très particulier induit par le fonctionnement des applications. En effet, lorsqu’une appli démarre, un nombre important de pages est utilisé pour la phase d’initialisation mais ne servira ensuite plus jamais. Le système peut et doit donc swapper ces pages et ainsi libérer la mémoire pour d’autres applications.

Cependant, cette méthode a un réel inconvénient… Dès lors que le système active le swap, il va utiliser le disque dur. Or, comme chacun le sait, les disques sont excessivement plus lents que la mémoire. Lorsque l’on évoque le temps passé pour écrire en mémoire, on parle de nanoseconde… Pour un disque, on parle de milliseconde… La conclusion est donc très simple : plus votre système swapera, plus il ralentira… Il est donc important de surveiller cette partie. Un système qui swape trop est un système qui manque de RAM…

Linux a deux formes de swap : la partition de swap et le fichier d’échange.

La partition de swap est une partie indépendante du disque dur utilisée uniquement pour le swap : aucun autre fichier ne peut y être stocké.

Le fichier d’échange, quant à lui, est un fichier spécial du système de fichiers.

Pour visualiser la quantité de swap que vous utilisez, il suffit de saisir dans votre terminal :

swapon -s

La sortie sera du type :

Filename Type	 Size	Used	Priority
/dev/sda5 partition	6384636	4	-1

Les informations à retenir sont assez simples :

– où est le swap : sur /dev/sda5

– de quel type est ce swap : partition dédiée et non fichier d’échange

– taille du swap : 6 Go

– Quantité de swap utilisé : 4 octets

– Priorité : indique au noyau quel swap est à utiliser en premier. Ce paramètre est très utile si vous devez monter plusieurs espaces de Swap (de préférence sur des disques différents) car il pourra augmenter considérablement ses performances.

Le fichier d’échange

GNU/Linux supporte également un fichier d’échange que vous pouvez créer, préparer, et monter d’une manière similaire à celle d’une partition de swap. L’avantage des fichiers d’échange est que vous n’avez pas besoin de trouver une partition vide ou de repartitionner un disque pour ajouter de l’espace de swap supplémentaire.

Pour créer un fichier d’échange, utilisez la commande dd afin de générer un fichier vide.

Par exemple, pour créer un fichier de 1 Go, tapez :

dd if=/dev/zero of=/swapfile bs=1024 count=1048576

où swapfile est le nom du fichier, 1048576 est le nombre d’octets définissant la taille de ce fichier.

Il faut ensuite définir le type de ce fichier comme étant du swap :

mkswap /swapfile

Il faut ensuite activer et monter ce fichier :

swapon /swapfile

Le fstab devrait donc ressembler à ceci :

/swapfile none swap sw 0 0

Quelle doit être la taille du swap ?

Il est possible de faire fonctionner un système GNU/Linux sans espace d’échange, tant qu’il y a une quantité suffisante de mémoire physique.

Mais une pénurie de mémoire physique entraînera un blocage complet du système. Il est donc fortement conseillé d’avoir un espace d’échange, d’autant qu’aujourd’hui, l’octet sur un disque n’est plus très cher.

La question importante est : combien pour mon swap ?

Les anciennes versions des systèmes d’exploitation de type Unix (telles que Sun OS et Ultrix) exigeaient une taille d’espace d’échange de deux à trois fois celle de la mémoire physique.

Les implémentations modernes d’Unix ou GNU/Linux ne nécessitent pas autant de swap, mais savent parfaitement l’utiliser si vous le configurez.

La règle de base est la suivante :

1) pour un système de bureau standard, utilisez un espace d’échange égal au double de la mémoire physique, car il vous permettra d’exécuter un grand nombre d’applications;

2) pour un serveur, configurez une petite quantité de swap, par exemple la moitié de la mémoire physique. En effet, il ne faut pas ralentir le système mais tout de même se garder une roue de secours au cas où. Mais il est nécessaire de surveiller la quantité de swap utilisée et ajouter de la RAM si nécessaire;

3) pour les machines de bureau sans trop de RAM (< à 1 Go), n’hésitez pas à utiliser beaucoup de swap, quitte à prendre jusqu’à 2 Go sur le disque.

Ce n’est qu’une base de travail. Rien n’est figé et vous n’êtes pas obligé(e) de suivre ce schéma. C’est une simple habitude de travail pour moi.

A savoir : sur les kernel 2.6 et ultérieurs, une variable nommée swappiness a été implémentée.

Elle permet à l’admin de gérer le swap, à la volée. Cette variable n’a qu’un seul argument, un nombre de 0 à 100. Plus la valeur est basse, plus on dit au système de conserver les applications en mémoire. Plus elle est haute, plus on lui demande de swaper. Attention tout de même de ne pas jouer aux apprentis sorciers au risque de mettre le système à genoux.

La valeur par défaut de cette variable est 60. Pour la modifier, à la volée (valeur remise à 60 au prochain reboot) :

echo 50 > /proc/sys/vm/swappiness

Pour changer définitivement cette valeur, il faut modifier la valeur de vm.swappiness dans le fichier /etc/sysctl.conf

Conclusion

La gestion du swap est un aspect essentiel de l’administration système.

Une bonne configuration et une bonne utilisation de l’espace d’échange peuvent offrir de nombreux avantages.

N’hésitez pas à expérimenter, mais à toujours surveiller votre système pour vous assurer d’obtenir les résultats dont vous avez besoin.

Soyez prudents, et bon hack à tous.

Antonin