Outils pour utilisateurs

Outils du site


issue49:labolinux

Last time, we established a kind of sliding scale to determine whether or not a Swap partition is a) essential, b) useful, c) wasteful, or d) obsolete. Don't worry, this isn't an exam. However, it may be worth looking into the topic of Virtual Memory Management, to call it by its proper name, a little further. Ancient Linux hackers among you will have to excuse the Dr. Seuss-level distillation which follows (or else go write your own 300-page book on the subject). Page by Page Memory, as used by a Linux operating system, is divided into pages, which can themselves be categorized by usage: • Kernel Pages are fixed in memory and never swapped. Some operating systems have pageable kernels, but Linux plays it 'safe'. • Program or application memory pages are held as read-only in memory and are exact copies of the binary executable on disk. • File-backed pages are those containing volatile values which haven't been written back out to disk. These might contain changes in memory that haven't been written out yet. • Anonymous mappings are volatile pages which don't correspond to any file name; these contain the stack and heap variables of running tasks, created by a program requesting a memory allocation from the kernel.

La dernière fois, nous avons créé une sorte d'échelle mobile afin de déterminer si, oui ou non, une partition swap est a) essentielle, b) utile, c) gaspilleuse, ou d) obsolète. Ne vous inquiétez pas, ce n'est pas un examen. Cependant, cela peut valoir le coup d'examiner de plus près le sujet de la gestion de la mémoire virtuelle (Virtual Memory Management), pour l'appeler comme il faut. Les anciens hackers Linux parmi vous devront excuser le résumé du niveau du Docteur Seuss (Ndt : auteur de livres pour enfants, comme Le Chat chapeauté ) qui suit (ou, alors, écrire votre propre livre de 300 pages sur le sujet).

Page par page

La mémoire, telle qu'utilisée par un système d'exploitation Linux, est divisée en pages, qui peuvent elle-mêmes être classées d'après leur usage :

* Les pages du noyau sont fixées dans la mémoire et ne sont jamais déplacées. Certains systèmes d'exploitation possèdent des noyaux qui sont paginables, mais Linux joue la sécurité.

* Les pages mémoire de programmes ou d'applications sont gardées dans la mémoire en lecture seule et sont des copies exactes du fichier binaire exécutable sur le disque.

* Les pages de fichiers sauvegardés contiennent des valeurs volatiles qui n'ont pas encore été écrites sur le disque. Celles-ci peuvent contenir des modifications dans la mémoire qui n'ont pas encore été écrites.

* Les pages de topographie mémoire anonymes sont des pages instables qui ne correspondent à aucun nom de fichier ; celles-ci contiennent les variables de pile et de tas (stack et heap) des tâches en cours d'exécution, créées par un programme qui a demandé au noyau une allocation de mémoire.

The cached pages can be divided into 'clean' and 'dirty', which the kernel memory manager has to look after in the background. • Clean means the data in memory is the same as on disk, or, the values are unchanged since they were instantiated. Clean pages can be discarded whenever the memory is required for something else as they match the original data available on disk. • Dirty pages contain changed data since the last read or instantiation. These have to be 'evicted' - the changed values recorded to disk - before the memory can be flushed.

Les pages de cache peuvent être classées en « propres » et en « sales » ; le gestionnaire de mémoire du noyau doit s'en occuper en tâche de fond.

• Propre signifie que les données en mémoire sont les mêmes que sur le disque ou que les valeurs n'ont pas été modifiées depuis qu'elles ont été instanciées. Les pages propres peuvent être enlevées quand le système a besoin de mémoire pour autre chose, puisqu'elles correspondent aux données originales disponibles sur disque.

• Les pages sales contiennent des données modifiées depuis la dernière lecture ou instanciation. Il faut qu'elles soient « évincées » - les valeurs modifiées doivent être écrites sur le disque - avant la remise à zéro de la mémoire.

It's important to remember that Linux has no separate disk cache, unlike Unix- or DOS-based systems. It's designed to read-in and keep the most useful data from disk as cached pages. Also, the kernel doesn't usually modify the disk directly: changes are made to the files in memory, then 'flushed' after a disk-write by the memory manager. It's a data-security thing. At times of peak workload, this is the operation which slows everything down, as the kernel runs out of empty and clean pages in the pool; it has to write dirty pages to disk before it can continue on with its prioritized tasks. File-backed pages are flushed by writing-back to their parent file on disk. Anonymous mappings, however, have no backing-file, these are stacks and arrays of works-in-progress. Where do they go? Into Swap!

Il est important de se souvenir que, contrairement aux systèmes basés sur Unix ou sur DOS, Linux n'a pas de cache disque distinct. Sa conception veut qu'il lise les données les plus utiles du disque, puis qu'il les garde comme des pages en cache. En général, le noyau ne modifie pas directement le disque : les fichiers en mémoire sont modifiés, puis la mémoire est remise à zéro après qu'ils soit écrits sur le disque par le gestionnaire de mémoire. C'est une question de sécurité des données.

Aux heures de pointe, c'est l'opération qui ralentit tout, puisque le noyau n'a plus de pages vides et propres dans le groupe ; il faut qu'il écrive les pages sales sur le disque avant de pouvoir continuer ses tâches priorisées. Les pages de fichiers sauvegardées sont remises à zéro lors de l'écriture de ceux-ci vers leur fichier parent sur le disque. N'ayant pas fichier de sauvegarde, les topographies anonymes, cependant, sont des piles et des rangements de travaux en cours. Où vont-elles ? Dans la partition swap !

If you don't have swap space, then anonymous mappings can't be flushed, they have to stay in memory until they're deleted. This reduces the size of the memory pool that the kernel can draw on to keep running all concurrent processes. It has to keep juggling file-backed pages, which can be even slower in operation; navigating directory trees and performing disk-writes by-the-book. It's a lot simpler and faster to blast out copies of flat pages to Swap. Remember, RAM is expensive, disk is cheap.

Si vous n'avez pas de place de swap, les topographies anonymes ne peuvent pas être remises à zéro et elles devront rester dans la mémoire jusqu'à leur suppression. Cela réduit la taille de la mémoire disponible dont le noyau peut se servir pour l'exécution de tous les processus simultanés en cours. Il faut qu'il jongle avec les pages de fichiers sauvegardés, une opération qui peut être encore plus lente : naviguer dans les arborescences de répertoires et écrire vers le disque selon les règles prend beaucoup de temps. C'est beaucoup plus simple et rapide d'envoyer vite fait la copie de pages plates vers la partition swap.

Partition or File? The original criticism is that a whole swap partition is a waste, especially if you have only a small hard disk or solid state drive. You can use swap files, as do some other operating systems we won't mention, but remember swap files have to obey the rules alongside everything else on your journaling file system. A swap partition is ring-fenced for paging; no other files can reside there.

Partition ou fichier ?

La critique de départ est qu'une partition swap entière est du gâchis, surtout si vous n'avez qu'un petit disque dur ou un solid-state drive (SSD). Vous pouvez vous servir de fichiers swap, comme quelques autres systèmes d'exploitation que nous nommerons pas, mais il faut vous rappeler que les fichiers swap doivent suivre les mêmes règles à côté de tout le reste dans votre système de fichiers journalisé. Une partition swap est cantonnée pour la pagination ; aucun autre fichier ne peut y résider.

Kernel Panic This is a recognized medical condition of mental anxiety, brought on in Linux users when they run the free or vmstat commands and discover how little free memory is reported. You can relax, this is quite normal. The kernel memory manager tries to keep the available RAM filled with cached pages in expectation that the files will be used again and it won't have to go to disk to fetch them. This is intentional. Whole books have been written on the predictive algorithms used to predict what to cache, what to flush, when, and how much memory is sensible to leave in the empty pool. You can watch your free memory go up and down, if you have nothing better to do. Right after boot-time, there's a large pool, decreasing when you begin running application programs, then increasing again when a program exits and the data pages it held are released.

La panique du noyau

C'est une condition médicale reconnue d'angoisse, qui survient chez les utilisateurs Linux lorsqu'ils lancent les commandes « free » ou « vmstat » et découvrent le peu de mémoire libre qui reste. Vous pouvez vous détendre, c'est tout à fait normal.

Le gestionnaire de mémoire du noyau essaie de remplir la RAM disponible avec des pages en cache car il s'attend à ce que les fichiers soient utilisés à nouveau et, ainsi, il n'aura pas besoin d'aller les chercher sur le disque. C'est fait exprès. Des livres entiers ont été écrits sur les algorithmes utilisés pour prédire ce qu'il faut mettre en cache, ce qu'il faut remettre à zéro, quand et combien de mémoire il serait souhaitable de laisser dans le groupe vide. Si vous n'avez rien de mieux à faire, vous pouvez regarder la quantité de votre mémoire libre monter et descendre. Juste après le démarrage, il y en a beaucoup, qui décroît quand vous commencez à lancer des applications, puis augmente à nouveau quand vous fermez un programme et que les pages de données qu'il détenait sont relâchées.

Swap On To check the state of your swap partition, use: swapon -s which gave me the result shown below. The Linux 2.6 kernel has a parameter called swappiness which you can use to tune the way Linux uses Swap. It is a number from 0 to 100: 0 means minimal swapping, keeping more pages resident in memory, even if they are idle. Going up the scale to 100 increases the rate of swapping in an attempt to maximize the amount of free memory available in the pool. The default value for swappiness is 60. You can alter it using root permissions and a parameter command such as : echo 50 > /proc/sys/vm/swappiness

Swap on

Pour vérifier l'état de votre partition swap, utilisez :

swapon -s

qui m'a retourné le résultat ci-dessous.

Le noyau 2.6 de Linux a un paramètre qui s'appelle « swappiness » [Ndt : nous l'avons traduit dans le titre par swapitude] dont vous pouvez vous servir pour régler la façon dont Linux utilise la partition swap. C'est un chiffre de 0 à 100 : 0 veut dire un minimum de swapitude où plus de pages sont gardées en mémoire, même si elles ne font rien. En montant à 100, vous augmentez le taux de swapitude pour essayer de maximiser la quantité de mémoire libre disponible. La valeur par défaut pour le « swappiness » est 60. Vous pouvez le changer avec les droits de root et une commande de paramètre comme :

echo 50 > /proc/sys/vm/swappiness

Any value set this way lasts until the next re-boot. To change it permanently, you need to edit the vm.swappiness parameter in the /etc/sysctl.conf file . In adjusting swappiness, you are making a judgment call; it prejudices the kernel memory manager for-or-against swapping out to disk. Set swappiness too high, you risk your disk-writes going through the roof; meanwhile every concurrent process has to wait even longer in line for its data to be read back in from disk before it gets a slice of processing time. Which brings us neatly back to the need for Swap. It's only there to support our marvelous multi-tasking, time-slicing operating system that we run on our lightning fast, parallel-processing multi-core CPUs. If you only do one thing at a time, you can happily ignore everything I just said. Before you do, try running the top command in a terminal during a busy session.

Toute valeur réglée de cette manière dure jusqu'au prochain redémarrage. Pour le changer de façon permanente, il faut éditer le paramètre « vm.swappiness » dans le fichier /etc/sysctl.conf.

En ajustant la swapitude, vous portez un jugement ; vous allez ainsi influencer le gestionnaire de mémoire du noyau pour ou contre l'utilisation de la partition swap sur disque. Si votre réglage est trop haut, il y a un risque que les écritures sur disque sautent au plafond, tandis que les processus simultanés doivent attendre encore davantage dans la queue pour que leurs données soient lues sur le disque avant qu'ils reçoivent leur temps processeur.

Ce qui nous ramène habilement à la question de la nécessité d'une partition swap. Elle n'est là que pour soutenir le système d'exploitation multi-tâche, merveilleux et très rapide que nous exécutons sur notre CPU à coeurs multiples, capable du traitement parallèle et rapide comme l'éclair. Si vous ne faites qu'une chose à la fois, vous pouvez joyeusement vous désintéresser complètement de tout ce que je viens de dire. Avant, cependant, essayez de lancer la commande « top » [Ndt : un outil de surveillance du système] dans un terminal pendant une session très chargée.

issue49/labolinux.txt · Dernière modification : 2011/06/21 23:52 de andre_domenech