Pourquoi est-ce que swappiness est réglé à 60 par défaut?

109

Je viens de lire des articles sur le swappiness sous Linux. Je ne comprends pas pourquoi la valeur par défaut est 60.

Selon moi, ce paramètre devrait être réglé sur 10 afin de réduire l'échange. Swap est sur mes disques durs, il est donc beaucoup plus lent que ma mémoire.

Pourquoi ont-ils configuré le noyau comme ça?

Hugo
la source
2
@Mat Voyez ceci pour savoir comment effectuer une analyse comparative du swappiness.
Geremia

Réponses:

133

Depuis le noyau 2.6.28, Linux utilise un de Split les moins récemment utilisés (MRU) Page stratégie de remplacement. Les pages avec une source de système de fichiers, telles que le texte du programme ou les bibliothèques partagées, appartiennent au cache de fichiers. Les pages sans système de fichiers s'appellent des pages anonymes et consistent en des 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 coûtent moins cher à expulser de la mémoire (car elles peuvent être simplement relues à partir du disque en cas de besoin). . Etant donné que les pages anonymes n’ont pas de sauvegarde de système de fichiers, elles doivent rester en mémoire aussi longtemps qu’elles sont nécessaires à un programme, sauf s’il existe un espace d’échange pour les stocker.

Il est fréquent de penser qu’une partition de swap ralentirait votre système. Ne pas avoir de partition d'échange ne signifie pas que le noyau n'expulsera pas les pages de la mémoire, cela signifie simplement que le noyau a moins de choix quant aux pages à expulser. La quantité d’échange disponible n’affectera pas son utilisation.

Linux peut faire face à l'absence d'espace d'échange car, par défaut, la politique de comptabilisation de la mémoire du noyau peut surcharger la mémoire . L'inconvénient est que lorsque la mémoire physique est épuisé, et le noyau ne peut pas échanger des pages anonymes sur le disque, le hors-mémoire-killer mécanisme (OOM-killer) va commencer tuer la mémoire monopolisant processus « voyous » pour libérer de la mémoire pour d'autres processus.

L' vm.swappinessoption est un modificateur qui modifie l'équilibre entre permutation des pages de cache de fichiers en faveur des pages anonymes. Le cache de fichier se voit attribuer une valeur de priorité arbitraire de 200 à partir de laquelle vm.swappinessmodificateur 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 de priorité sont modérément favorables aux pages anonymes ( anon_prio=60, file_prio=200-60=140). Le comportement est défini mm/vmscan.cdans l'arborescence des sources du noyau.

A partir vm.swappinessde 100, les priorités seraient égales ( file_prio=200-100=100, anon_prio=100). Cela serait logique pour un système lourd en E / S s'il n'est pas voulu que les pages du cache de fichiers soient expulsées au profit de pages anonymes.

Inversement, définir le vm.swappinesssur 0empêchera le noyau d'expulser des pages anonymes au profit de pages du cache de fichiers. Cela peut être utile si la plupart des programmes se cachent eux-mêmes, 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 vont probablement en souffrir.

La valeur par défaut a très probablement été choisie comme milieu intermédiaire approximatif entre ces deux extrêmes. Comme pour tout paramètre de performance, les ajustements vm.swappinessdoivent être basés sur des données de référence comparables aux charges de travail réelles, et non pas seulement à un instinct.

Thomas Nyman
la source
4
Comment l'installation du système d'exploitation sur un périphérique à semi-conducteurs affecte-t-elle le compromis?
gerrit
3
@gerrit Le type de support de stockage sous-jacent n'est pas pertinent. Ce type de détail n'est pas visible pour le sous-système de gestion de la mémoire.
Thomas Nyman
Le type de support de stockage sous-jacent n’est pas pertinent du point de vue de l’utilisation de la mémoire. Vous pouvez envisager de réduire le temps nécessaire au support pour prendre en charge un nombre limité de lectures / écritures (mémoire flash, par exemple) afin d’augmenter sa longévité.
MatrixManAtYrService
2
@MatrixManAtYrService Grâce au nivellement interne et à la redondance intégrée, les disques SSD modernes (auxquels la question du commentaire précédent fait référence) ont une durée de vie pouvant aller jusqu'à 2 PB (!) D' écritures avant de présenter des erreurs. Même les disques les moins chers dans ces expériences duraient 300 To avant que des erreurs ne surviennent, bien au-delà de la cote de garantie officielle d'environ 100 To. Au moins, à mon avis, il n’est pas vraiment justifié d’adapter le swappiness à un SSD sur un poste de travail ou un ordinateur portable.
Thomas Nyman
2
@ThomasNyman vous faites valoir un bon point, pour la plupart des utilisateurs, il ne faut pas s'en inquiéter. Le cas qui m'a amené à ce poste impliquait un espace d'échange sur une carte SD, ce qui, je le reconnais, est un peu un cas extrême.
MatrixManAtYrService
9

Le problème est qu’il n’existe pas de valeur par défaut qui convienne à tous les besoins. Définir l'option swappiness sur 10 peut être un paramètre approprié pour les ordinateurs de bureau, mais la valeur par défaut de 60 peut être plus appropriée pour les serveurs. En d'autres termes, swappiness doit être ajusté en fonction du cas d'utilisation (bureau / serveur, type d'application, etc.).

De plus, le noyau Linux utilise la mémoire pour le cache disque, sinon la RAM ne serait pas utilisée et cela n’est ni efficace ni prévu. Avoir des données de disque dans le cache signifie que si quelque chose a besoin des mêmes données, il les obtiendra probablement de la mémoire. Extraire les données à partir de là est beaucoup plus rapide que de les récupérer à nouveau sur le disque. Et l'option swappiness est un mécanisme qui détermine à quel point le noyau Linux préfère effectuer un basculement vers un disque pour réduire le cache du disque. Devrait-il plutôt supprimer les anciennes données du cache ou échanger certaines pages de programme?

Cet article peut également apporter des éclaircissements sur le sujet. En particulier, comment la tendance à la permutation est estimée.

dsmsk80
la source
Je ne comprends pas pourquoi 60 est plus approprié pour les serveurs. J'ai des serveurs et certains processus vont en swap même si nous avons 40% de RAM libre. ça n'a pas de sens pour moi.
Hugo
7
Il est logique de déplacer des parties de la mémoire dans le swap s’il est très improbable qu’on y accédera. De cette manière, Linux garde le moins possible de la mémoire vive réelle pour être prêt à faire face aux situations où il en a réellement besoin.
rejouer
2
S'il vous plaît éviter les URL raccourcies
drs
Le lien vers l'article est mort, mais vous pouvez toujours le voir depuis la Wayback Machine
drs
L'article lié est informatif. Merci de le partager.
Pistos
5

Ajouter plus de détails aux réponses ci-dessus.
Comme nous utilisons de plus en plus de machines virtuelles, un hôte Linux peut être une machine virtuelle sur l'un de ces environnements de 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
    Nuage privé hautes performances (le type de solution que la plupart des banques paieraient en millions), dans lequel le disque est fourni par une baie de stockage très coûteuse avec de très bonnes entrées / sorties. Une partie de ce stockage peut être dans la RAM (dans la matrice de disques) sauvegardée par des disques SSD, sauvegardée par des disques normaux avec des piles. Dans cette situation, le disque visible par la machine virtuelle peut être légèrement plus lent que la RAM à laquelle il peut accéder. Pour une seule machine virtuelle, 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 machine virtuelle, vous en avez des centaines, des milliers ou plus. Dans cette situation, nous découvrons que la RAM du serveur (hyperviseur) est bon marché et abondante, alors que la mémoire RAM de stockage est chère (relativement parlant). Si nous divisons les besoins en RAM entre la RAM Hypervisor et SWAP fournis par notre matrice de stockage très coûteuse, nous constatons que nous utilisons rapidement toute la RAM de la matrice de stockage. Les blocs sont ensuite servis par le SSD et enfin par les piles. Soudain, tout commence à devenir vraiment lent. Dans ce cas, nous souhaitons probablement affecter une quantité importante de RAM (de l'hyperviseur) à la machine virtuelle et définir le swappiness sur 0 (uniquement l'échange pour éviter les conditions de mémoire insuffisante) car l'effet cumulé de toutes ces machines virtuelles aura une incidence sur les performances de le stockage,
  • Exemple 3 Un ordinateur portable ou de bureau moderne probablement équipé d'un disque SSD. Les besoins en mémoire sont considérés comme inconnus. Quel navigateur l'utilisateur utilisera-t-il, combien d'onglets seront-ils ouverts, éditeront-ils également un document, une image RAW ou éventuellement une vidéo, ils consommeront tous de la RAM. Si vous définissez swappiness sur une valeur faible et effectuez d’autres ajustements du système de fichiers, le nombre d’écritures sur le SSD sera réduit et la durée de vie sera plus longue.
Timothée c
la source
3
Les problèmes d'endurance en écriture SSD pour un système d'utilisateur final sont surestimés. Les disques SSD modernes survivent généralement à des volumes d’écriture de plusieurs centaines de téraoctets. Un système de bureau typique, même avec une utilisation intensive du swap, ne devrait probablement pas en utiliser autant pendant de nombreuses années.
Jules