Répondre à: SSD et swap sur Linux (Ubuntu et variantes, Manjaro, etc…)

#11767
andsoandso
Participant

salut nam,
toujours pas d’ accord avec ce réglage du swappiness

ou le raleur rale

tu te plantes en supposant que ce réglage est linéaire,
ce que dit raleur:
raleur :
60 est la valeur par défaut du noyau Linux, elle n’est pas spécifique à Debian. Je répète que cette valeur ne correspond pas du tout à un seuil d’occupation de la mémoire. Il suffit d’examiner la sortie de la commande free pour le voir. Cela n’aurait aucun sens de laisser 60% par défaut de la mémoire libre (donc inutilisée), cela reviendrait à avoir 60% de mémoire en moins !

La mémoire est faite pour être utilisée. TOUTE la mémoire. La mémoire libre est de la mémoire gaspillée.

La mémoire est divisée en pages. En simplifiant à l’extrême, les pages mémoire se répartissent en deux catégories :

les pages “anonymes” contenant les données des processus,
les pages de cache contenant des données liées au système de fichiers, qui se répartissent elles-même en plusieurs catégories (pagecache, dentries, inodes) mais je n’entrerai pas dans les détails.

Toutes les données lues ou écrites sur le système de fichiers sont mises en cache en mémoire. En lecture, cela permet d’accèder plus rapidement aux données déjà en cache sans avoir besoin de les recharger depuis le disque. En écriture, cela permet de ne pas attendre que les données soient effectivement écrites sur le disque.

Quand le noyau a besoin d’allouer de la mémoire et que la mémoire libre est en deçà d’un certains seuil (qui n’a rien à voir avec vm.swappiness, je le répète), il va lancer une procédure “d’éviction” pour libérer de la mémoire. L’éviction consiste à décharger des données de la mémoire. Les pages candidates à l’éviction sont dans les deux catégories citées précédemment : les pages anonymes et les pages de cache. Les pages de cache contiennent des données qui sont déjà stockées sur disque ou qui ont vocation à y être stockées (écritures en attente). Les données déjà stockées sur disque peuvent être immédiatement supprimées, et celles en attente d’écriture sur disque peuvent être écrites puis supprimées.

Les pages anonymes, en revanche, ne sont pas associées au système de fichiers. Avant de les décharger de la mémoire, elles doivent être écrites dans un espace du disque appelé “espace d’échange” ou swap. La encore, les pages qui ont été écrites dans le swap puis rechargées et utilisées sans être modifiées peuvent être immédiatement supprimées, alors que les pages qui n’ont jamais été écrites dans le swap ou qui ont été modifiées depuis leur précédente écriture doivent être écrites sur disque avant d’être supprimées.

On peut constater une similitude des mécanismes d’échange entre les pages anonymes et le swap d’une part, et les pages de cache et le système de fichiers d’autre part. D’une certaine façon on pourrait dire que les pages anonymes sont le cache du swap.

La valeur de vm.swappiness n’influe que sur la préférence du noyau à évincer des pages de cache (si valeur basse) ou anonymes (si valeur élevée). Mais ce n’est pas le seul critère qui entre en compte. Le noyau peut préférer swapper une page anonyme qui n’a pas été utilisée depuis longtemps plutôt qu’une page de cache qui a été utilisée récemment et a donc une plus grande probabilité d’être utilisée à nouveau.