Linux : Mémoire, RAM, swap
Swap et mémoire
- Un excellent article qui permet d'en savoir un peu plus sur le swap
Je vais tenter de le résumer ici. Le but est de répondre à l'affirmation : "le swap n'est qu'une mémoire d'urgence, et swapper c'est mal".
tl;dr:
- Avoir du swap est important pour un système fonctionnel : il permet une gestion saine de la mémoire.
- Le swap n'est pas fait pour être une mémoire d'urgence. Il est fait pour faire en sorte que la réclamation de la mémoire soit efficace et égalitaire.
- Enlever le swap ne prévient pas le fait que les IO ne soient un pb lors des contentions mémoire.
- Le swapper sur les Linnux post 4.0 est débarassé de pas mal de problèmes.
- Sur SSD, le swap des pages anonymes et la réclamationdes files pages sont essentiellement pareils. Sur HDD, les reads sont plus lents et une swappiness plus basse a du sens.
- Enlever le swap ne change rien au fait qu'un OOM-kill laisse le système dans un état imprévisible.
Résumé: Sous Linux, la RAM n'est pas directement utilisée (une allocation de RAM via malloc ne donne pas directement tant de blocs correspondants dans la RAM) : on parle de mémoire virtuelle. La mémoire virtuelle correspond (si j'ai bien compris) à un espace logique composée d'une partie de la RAM + le swap. La mémoire est divisée en pages. Il y'a plusieurs types de mémoires:
- les pages anonymes : ce sont les blocs utilisées par les programmes , appellées avec malloc par exemple (en réalité, l'appel system mmap avec le flag MAP_ANONYMOUS).
- les pages de 4k servant de cache pour le système de fichiers (file pages) ou celles servant de cache pour les métadonnées. On parle pour l'ensemble de page cache.
- Il y'en a d'autres, mais ce sont les 2 plus connues.
On doit du coup distinguer toutes nos pages en:
- réclamables : soit parce qu'elles n'ont pas été modifiées, soit parce que les données qu'elles contiennent existe sur disque dans le cas des file pages
- non-réclamable : c'est le cas des pages anonymes. Leurs données n'existent pas ailleurs; et du coup, on ne pas récupérer leur espace !
C'est là qu'intervient le swap : il permet de rendre toutes les pages réclamables afin de ne pas bloquer certains blocs de la RAM, par exemple. Il est avant tout un mécanisme de gestion de la mémoire. Je cite : "Swap is primarily a mechanism for equality of reclamation, not for emergency "extra memory". Swap is not what makes your application slow – entering overall memory contention is what makes your application slow.".
Voir la source. Elle est bien.