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?
Réponses:
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.swappiness
option 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 laquellevm.swappiness
modificateur 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éfinimm/vmscan.c
dans l'arborescence des sources du noyau.A partir
vm.swappiness
de100
, 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.swappiness
sur0
empê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.swappiness
doivent être basés sur des données de référence comparables aux charges de travail réelles, et non pas seulement à un instinct.la source
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.
la source
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
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.
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,
la source