web-dev-qa-db-fra.com

Pourquoi la permutation est-elle définie sur 60 par défaut?

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?

111
Hugo

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.

136
Thomas Nyman

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.

9
dsmsk80

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

  • Exemple 1
    Un cloud privé hautes performances (pensez à ce que la plupart des banques paieraient des millions), où le disque est fourni par une baie de stockage très chère avec de très bonnes E/S. Une partie de ce stockage peut être dans RAM (dans la baie de disques), soutenue par des disques SSD, soutenue par des disques ordinaires avec des broches. Dans cette situation, le disque que le VM voit peut être un peu plus lent que le RAM auquel il peut accéder. Pour un seul MV, il n'y a pas beaucoup de différence entre swap et ram.
  • Exemple 2
    Identique à l'exemple 1, mais au lieu d'une seule VM, vous en avez des centaines, des milliers ou plus. Dans cette situation, nous découvrons que le serveur (hyperviseur) RAM est bon marché et abondant où le stockage RAM est cher (relativement parlant). Si nous divisons les exigences RAM entre l'hyperviseur RAM et SWAP fournis par notre baie de stockage très chère, nous constatons que nous utilisons rapidement tous les RAM dans la baie de stockage, les blocs sont ensuite desservis par les SSD et enfin par les broches. Soudain, tout commence à devenir très lent. Dans ce cas, nous voulons probablement affecter beaucoup de RAM (de l'hyperviseur) à VM et définir la permutabilité à 0 (uniquement permuter pour éviter les conditions de mémoire insuffisante) comme effet cumulatif de tous ces vm aura un effet sur les performances du stockage, où la définition de la permutabilité plus élevée peut donner une amélioration des performances perçue car il y aura plus inutilisé RAM parce que les applications qui ne sont pas actuellement en interaction avec ont été (la plupart du temps) troqué.
  • Exemple 3 Un ordinateur portable ou de bureau moderne avec probablement un SSD. Les besoins en mémoire sont considérés comme inconnus. Quel navigateur l'utilisateur utilisera-t-il, combien d'onglets auront-ils ouverts, éditeront-ils également un document, une image RAW ou éventuellement une vidéo, ils consommeront tous de la RAM. La définition de la permutation sur une valeur faible et l'exécution d'autres ajustements du système de fichiers signifieront qu'il y aura moins d'écritures sur le SSD et que cela durera donc plus longtemps.
5
Timothy c