Je viens de lire quelques trucs sur la permutation sous Linux. Je ne comprends pas pourquoi la valeur par défaut est définie sur 60.
Selon moi, ce paramètre devrait être réglé sur 10 afin de réduire l'échange. Le swap est sur mes disques durs, donc il nous est beaucoup plus lent que ma mémoire.
Pourquoi ont-ils configuré le noyau comme ça?
Depuis le noyau 2.6.28, Linux utilise une stratégie de remplacement de page Split Least récemment utilisé (LRU). Les pages avec une source de système de fichiers, comme le texte du programme ou les bibliothèques partagées, appartiennent au cache de fichiers. Les pages sans support de système de fichiers sont appelées pages anonymes et se composent de données d'exécution telles que l'espace de pile réservé aux applications, etc. En règle générale, les pages appartenant au cache de fichiers sont moins coûteuses à supprimer de la mémoire (car elles peuvent simplement être lues à partir du disque si nécessaire) . Étant donné que les pages anonymes n'ont pas de support de système de fichiers, elles doivent rester en mémoire aussi longtemps qu'elles sont nécessaires à un programme, sauf s'il y a de l'espace d'échange pour les stocker.
C'est une idée fausse commune qu'un swap partition ralentirait en quelque sorte votre système. Ne pas avoir de partition de swap ne signifie pas que le noyau n'effacera pas les pages de la mémoire, cela signifie simplement que le noyau a moins de choix en ce qui concerne les pages à expulser. La quantité de swap disponible n'affectera pas la quantité utilisée.
Linux peut faire face à l'absence d'espace d'échange car, par défaut, la politique de comptabilité de la mémoire du noyau peut surcharger la mémoire . L'inconvénient est que lorsque la mémoire physique est épuisée et que le noyau ne peut pas échanger des pages anonymes sur le disque, le mécanisme out-of-memory-killer (OOM-killer) commencera à tuer le "voyou" qui monopolise la mémoire. "processus pour libérer de la mémoire pour d'autres processus.
L'option vm.swappiness
est un modificateur qui modifie l'équilibre entre l'échange de pages de cache de fichiers au profit de pages anonymes. Le cache de fichiers reçoit une valeur de priorité arbitraire de 200 dont le modificateur vm.swappiness
Est déduit (file_prio=200-vm.swappiness
). Les pages anonymes, par défaut, commencent par 60 (anon_prio=vm.swappiness
). Cela signifie que, par défaut, les poids prioritaires sont modérément en faveur des pages anonymes (anon_prio=60
, file_prio=200-60=140
). Le comportement est défini dans mm/vmscan.c
Dans l'arborescence des sources du noyau.
Étant donné un vm.swappiness
De 100
, Les priorités seraient égales (file_prio=200-100=100
, anon_prio=100
). Cela aurait du sens pour un système lourd d'E/S si l'on ne voulait pas que les pages du cache de fichiers soient supprimées au profit de pages anonymes.
Inversement, définir vm.swappiness
Sur 0
Empêchera le noyau d'expulser les pages anonymes au profit des pages du cache de fichiers. Cela peut être utile si les programmes effectuent eux-mêmes la plupart de leur mise en cache, ce qui peut être le cas avec certaines bases de données. Dans les systèmes de bureau, cela pourrait améliorer l'interactivité, mais l'inconvénient est que les performances d'E/S seront probablement affectées.
La valeur par défaut a probablement été choisie comme un milieu approximatif entre ces deux extrêmes. Comme pour tout paramètre de performance, l'ajustement de vm.swappiness
Doit être basé sur des données de référence comparables à des charges de travail réelles, et pas seulement sur une intuition.
Le problème est qu'il n'y a pas de valeur par défaut unique qui conviendra à tous les besoins. La définition de l'option de permutation sur 10 peut être un paramètre approprié pour les bureaux, mais la valeur par défaut de 60 peut être plus appropriée pour les serveurs. En d'autres termes, la permutation doit être ajustée en fonction du cas d'utilisation - bureau vs serveur, type d'application et ainsi de suite.
De plus, le noyau Linux utilise de la mémoire pour le cache disque, sinon le RAM ne serait pas utilisé et ce n'est pas efficace et prévu. Avoir des données de disque dans le cache signifie que si quelque chose a encore besoin des mêmes données , il les obtiendra probablement de la mémoire. La récupération des données à partir de là est beaucoup plus rapide que de les récupérer à nouveau sur le disque. Doit-il plutôt supprimer les anciennes données du cache ou doit-il échanger certaines pages de programme?
Cet article peut également éclairer le sujet. Surtout, comment la tendance à l'échange est estimée.
Ajout de plus de détails aux réponses ci-dessus.
Comme nous utilisons de plus en plus de VM, un hôte Linux peut être un VM sur l'un de ces environnements cloud. Dans les deux exemples 1 et 2, nous avons une bonne idée des applications en cours d'exécution et donc de la quantité de RAM qu'elles consomment. En 3, pas tellement