GNU/Linux >> Tutoriels Linux >  >> Linux

Swappiness sous Linux :tout ce que vous devez savoir

Si vous êtes un utilisateur ou un passionné de Linux depuis un certain temps, le terme swap ou swap memory ne devrait pas vous être inconnu. Mais, malheureusement, de nombreux utilisateurs de Linux ont tendance à confondre le concept de mémoire d'échange avec la permutation. L'idée fausse la plus courante est qu'une valeur d'échange indique la RAM maximale utilisable avant le début du processus d'échange réel.

Pour briser cette idée fausse largement répandue, nous devons décomposer la définition de l'échange et de l'échange.

Éliminer l'échange des idées fausses courantes

De swappiness, le terme swapping est conçu. Pour que l'échange ait lieu, la RAM (Random Access Memory) doit avoir des données système. Lorsque ces données sont écrites sur un emplacement de disque dur dédié comme un fichier d'échange ou une partition d'échange, la RAM système est libérée de l'espace nécessaire. Cette libération de la RAM système constitue la définition du swapping.

Votre système d'exploitation Linux contient un paramètre de configuration de valeur swappiness. L'existence de cette valeur continue de brasser de nombreuses idées fausses sur sa fonctionnalité système prévue. Le plus courant est son association avec le seuil d'utilisation de la RAM. D'après la définition de l'échange, l'échange est mal compris comme la valeur de stockage RAM maximale qui déclenche le début de l'échange.

Zones partagées RAM

Pour clarifier l'idée fausse de l'échange discutée précédemment, nous devons commencer par là où cette idée fausse a commencé. Tout d'abord, nous devons examiner la mémoire vive (RAM). Notre interprétation de la RAM est très différente de la perception du système d'exploitation Linux. Nous voyons la RAM comme une seule entité de mémoire homogène tandis que Linux l'interprète comme des zones ou des régions de mémoire divisées.

La disponibilité de ces zones sur votre machine dépend de l'architecture de la machine utilisée. Par exemple, il peut s'agir d'une machine à architecture 32 bits ou d'une machine à architecture 64 bits. Pour mieux comprendre ce concept de zones fractionnées, considérez la répartition et les descriptions suivantes des zones informatiques de l'architecture x86.

  • Accès direct à la mémoire (DMA) :Ici, la capacité de la région ou de la zone de mémoire pouvant être allouée est aussi faible que 16 Mo. Son nom est lié à sa mise en œuvre. Les premiers ordinateurs ne pouvaient communiquer qu'avec la mémoire physique d'un ordinateur via l'approche d'accès direct à la mémoire.
  • Accès direct à la mémoire 32 (DM A 32) :Indépendamment de cette convention de nommage attribuée, DMA32 est une zone mémoire uniquement applicable à une architecture Linux 64 bits. Ici, la capacité de la région ou de la zone de mémoire allouable ne dépasse pas 4 Go. Par conséquent, une machine Linux alimentée en 32 bits ne peut atteindre qu'un DMA de 4 Go de RAM. La seule exception à ce cas est lorsque l'utilisateur Linux décide d'utiliser le noyau PAE (Physical Address Extension).
  • Normale :La proportion de RAM de la machine supérieure à 4 Go, par estimation, sur une architecture informatique 64 bits, répond à la définition métrique et aux exigences de la mémoire normale. D'autre part, une architecture d'ordinateur 32 bits définit une mémoire normale comprise entre 16 Mo et 896 Mo.
  • Élevé M em :Cette zone de mémoire n'est évidente que sur l'architecture d'ordinateur Linux 32 bits. Il est défini comme la capacité de RAM supérieure à 896 Mo pour les petites machines et supérieure à 4 Go pour les grandes machines ou celles dotées de fonctionnalités et de spécifications matérielles performantes.

Valeurs RAM et PAGESIZE

L'allocation de RAM de l'ordinateur est déterminée en pages. Ces allocations de pages sont configurées sur des tailles fixes. Le noyau du système est le déterminant de ces allocations de taille fixe. L'allocation de page a lieu au démarrage du système lorsque le noyau détecte l'architecture de votre ordinateur. Sur un tel ordinateur Linux, la taille de page typique est d'environ 4 Ko.

Pour déterminer la taille de la page de votre machine Linux, vous pouvez utiliser la commande "getconf" comme illustré ci-dessous :

$ getconf PAGESIZE

L'exécution de la commande ci-dessus sur votre terminal devrait vous donner une sortie comme :

4096

Pièces jointes des zones et des nœuds

Les zones de mémoire discutées ont un lien direct avec les nœuds du système. L'UC ou l'unité centrale de traitement s'associe directement à ces nœuds. Cette association nœud-processeur à laquelle le noyau du système fait référence lors de l'allocation de mémoire est nécessaire à un processus dont l'exécution est planifiée par le même processeur.

Ces niveaux nœuds-CPU sont essentiels pour l'installation de types de mémoire mixtes. Les ordinateurs multi-CPU spécialisés sont la cible principale de ces installations de mémoire. Cette procédure ne réussit que lorsque l'architecture d'accès mémoire non uniforme est utilisée.

Avec des exigences aussi élevées, un ordinateur Linux s'associera en moyenne à un nœud spécifique. Le terme OS pour cela est nœud zéro. Ce nœud possède toutes les zones de mémoire disponibles. Ces nœuds et zones sont également accessibles à partir de votre système d'exploitation Linux. Tout d'abord, vous devrez accéder au fichier "/proc/buddyinfo". Vous pouvez utiliser la commande suivante pour atteindre cet objectif.

$ less /proc/buddyinfo

La sortie de votre terminal devrait ressembler à la capture d'écran suivante.

Comme vous pouvez le voir, de mon côté, j'ai affaire à trois zones :DMA, DMA32 et zones normales.

L’interprétation des données de ces zones est simple. Par exemple, si nous optons pour la zone DMA32, nous pouvons démêler certaines informations critiques. En se déplaçant de gauche à droite, nous pouvons révéler ce qui suit :

4846 : Les blocs de mémoire disponibles peuvent être interprétés comme 4846 sur 2^(0*PAGESIZE)

3946 : Les blocs de mémoire disponibles peuvent être interprétés comme 3946 sur 2^(1*PAGESIZE)

2490 : Les blocs de mémoire disponibles peuvent être interprétés comme 2490 sur 2^(2*PAGESIZE)

0 : Les blocs de mémoire disponibles peuvent être interprétés comme 0 sur 2^(512*PAGESIZE)

Les informations ci-dessus clarifient la relation entre les nœuds et les zones.

Pages de fichiers par rapport aux pages anonymes

Les entrées de table de pages fournissent à la fonctionnalité de mappage de mémoire les moyens nécessaires pour enregistrer l'utilisation de pages de mémoire spécifiques. Pour cette raison, le mappage mémoire existe dans les phases fonctionnelles suivantes :

Fichier sauvegardé : Avec ce type de mappage, les données qui existent ici proviennent d'un fichier. Le mappage ne limite pas sa fonctionnalité à des types de fichiers spécifiques. N'importe quel type de fichier est utilisable tant que la fonction de mappage peut en lire les données. La flexibilité de cette fonctionnalité du système est qu'une mémoire libérée par le système peut facilement être récupérée et ses données réutilisées tant que le fichier contenant les données reste lisible.

Si par hasard des changements de données se produisent dans la mémoire, le fichier du disque dur devra enregistrer les changements de données. Elle doit avoir lieu avant que la mémoire utilisée ne soit à nouveau libre. Si cette précaution n'est pas respectée, le fichier du disque dur ne parviendra pas à noter les changements de données qui se sont produits en mémoire.

Anonyme : Ce type de technique de mappage de mémoire n'a pas de fonctionnalité de sauvegarde de périphérique ou de fichier. Les demandes de mémoire disponibles sur ces pages peuvent être décrites comme à la volée et sont initiées par des programmes qui ont un besoin urgent de conserver des données. De telles demandes de mémoire sont également efficaces lorsqu'il s'agit de piles et de tas de mémoire.

Étant donné que ces types de données ne sont pas associés à des fichiers, leur nature anonyme a besoin de quelque chose pour fonctionner instantanément comme un emplacement de stockage fiable. Dans ce cas, une partition d'échange ou un fichier d'échange est créé pour contenir ces données de programme. Les données seront d'abord déplacées vers l'échange avant que les pages anonymes contenant ces données ne soient libérées.

Appareil pris en charge : Les fichiers de périphérique de bloc sont utilisés pour adresser les périphériques système. Le système considère les fichiers de l'appareil comme des fichiers système normaux. Ici, la lecture et l'écriture de données sont possibles. Les données de stockage de l'appareil facilitent et lancent le mappage de la mémoire sauvegardée par l'appareil.

Partagé : Une seule page RAM peut contenir ou être mappée avec plusieurs entrées de table de pages. N'importe lequel de ces mappages peut être utilisé pour accéder aux emplacements de mémoire disponibles. Quel que soit le parcours cartographique, l'affichage final des données sera toujours le même. Parce que les emplacements de mémoire ici sont surveillés conjointement, la communication inter-processus est plus efficace grâce à l'échange de données. Les communications inter-processus sont également très performantes grâce aux mappages inscriptibles partagés.

Copie sur écriture : Cette technique d'allocation est quelque peu paresseuse. Si une demande de ressource se produit et que la ressource demandée existe déjà en mémoire, la ressource d'origine est mappée pour satisfaire cette demande. De plus, la ressource peut être partagée par plusieurs autres processus.

Dans de tels cas, un processus peut essayer d'écrire dans cette ressource. Si cette opération d'écriture doit réussir, une réplique de cette ressource doit exister en mémoire. La copie ou le réplica de la ressource s'adaptera désormais aux modifications effectuées. En bref, c'est cette première commande d'écriture qui lance et exécute l'allocation de mémoire.

Parmi ces cinq approches de mappage de mémoire discutées, la permutation traite des pages sauvegardées sur fichier et des routines de mappage de mémoire de pages anonymes. Par conséquent, ce sont les deux premières techniques de mappage de mémoire discutées.

Comprendre l'échange

Sur la base de ce que nous avons couvert et discuté jusqu'à présent, la définition de l'échange peut maintenant être facilement comprise.

En termes simples, la permutation est un mécanisme de contrôle du système qui détaille l'intensité de l'agressivité du noyau du système lors de la permutation des pages de mémoire. Une valeur de swappiness est utilisée pour identifier ce niveau d'agressivité du noyau du système. L'agressivité accrue du noyau est indiquée par des valeurs d'échange plus élevées, tandis que le montant de l'échange diminue avec des valeurs plus faibles.

Lorsque sa valeur est à 0, le noyau n'a pas l'authentification pour initier le swapping. Au lieu de cela, le noyau fait référence aux pages sauvegardées sur fichier et libres avant de lancer l'échange. Ainsi, lorsque l'on compare le swappiness avec le swap, le swappiness est responsable de la mesure intensive du swap vers le haut et vers le bas. Fait intéressant, une valeur de permutation fixée à zéro n'empêche pas la permutation d'avoir lieu. Au lieu de cela, il ne fait que bloquer l'échange lorsque le noyau du système attend que certaines conditions d'échange soient viables.

Github fournit une description du code source plus convaincante et des valeurs associées à l'implémentation de swappiness. Par définition, sa valeur par défaut est représentée par la déclaration de variable et l'initialisation suivantes.

Int vm_swappiness = 60;

Les plages de valeurs de swappiness sont comprises entre 0 et 100. Le lien Github ci-dessus pointe vers le code source pour son implémentation.

La valeur d'échange idéale

Plusieurs facteurs déterminent la valeur de swappiness idéale pour un système Linux. Ils incluent le type de disque dur, le matériel, la charge de travail de votre ordinateur et s'il est conçu pour fonctionner comme un serveur ou un ordinateur de bureau.

Vous devez également noter que le rôle principal du swap n'est pas d'initier un mécanisme de libération de mémoire pour la RAM d'une machine lorsque l'espace mémoire disponible est épuisé. L'existence d'un échange est, par défaut, un indicateur d'un système en bon état de fonctionnement. Son absence impliquerait que votre système Linux doit adhérer à des routines de gestion de la mémoire insensées.

L'effet de l'implémentation d'une valeur de permutation nouvelle ou personnalisée sur un système d'exploitation Linux est instantané. Il écarte la nécessité d'un redémarrage du système. Par conséquent, cette fenêtre est l'occasion d'ajuster et de surveiller les effets de la nouvelle valeur de swappiness. Ces ajustements de valeur et la surveillance du système doivent se dérouler sur une période de plusieurs jours et semaines jusqu'à ce que vous obteniez un nombre qui n'affecte pas les performances et la santé de votre système d'exploitation Linux.

Lors de l'ajustement de votre valeur de swappiness, tenez compte des pointeurs suivants :

  • Tout d'abord, l'implémentation de 0 comme valeur d'échange définie ne désactive pas la fonctionnalité d'échange. Au lieu de cela, l'activité du disque dur du système passe d'associée à l'échange à associée à un fichier.
  • Si vous travaillez avec des disques durs d'ordinateur vieillissants ou anciens, il est recommandé de réduire la valeur d'échange Linux associée. Cela minimisera les effets du roulement de la partition d'échange et empêchera également la récupération de page anonyme. L'attrition du système de fichiers augmentera lorsque l'attrition d'échange diminuera. Avec l'augmentation d'un paramètre entraînant la diminution d'un autre, votre système Linux sera plus sain et performant avec une méthode de gestion de la mémoire efficace au lieu de produire une performance moyenne avec deux méthodes.
  • Les serveurs de base de données et autres serveurs à usage unique doivent avoir des directives logicielles de leurs fournisseurs. Ils sont livrés avec une gestion de la mémoire fiable et des mécanismes de cache de fichiers spécialement conçus. Les fournisseurs de ce logiciel sont mandatés pour suggérer une valeur d'échange Linux recommandée en fonction de la charge de travail et des spécifications de la machine.
  • Si vous êtes un utilisateur de bureau Linux moyen, il est conseillé de s'en tenir à la valeur de swappiness déjà définie, surtout si vous utilisez un matériel relativement récent.

Travailler avec une valeur d'échange personnalisée sur votre machine Linux

Vous pouvez modifier votre valeur d'échange Linux en un chiffre personnalisé de votre choix. Tout d'abord, vous devez connaître la valeur actuellement définie. Cela vous donnera une idée de combien vous souhaitez diminuer ou augmenter la valeur de swappiness définie par le système. Vous pouvez vérifier la valeur actuellement définie sur votre machine Linux avec la commande suivante.

$ cat /proc/sys/vm/swappiness

Vous devriez obtenir une valeur comme 60 car il s'agit de la valeur par défaut du système.

Le "sysctl" est utile lorsque vous avez besoin de changer cette valeur de swappiness en un nouveau chiffre. Par exemple, nous pouvons le changer en 50 avec la commande suivante.

$ sudo sysctl vm.swappiness=50

Votre système Linux reprendra immédiatement cette valeur nouvellement définie sans avoir besoin de redémarrer. Le redémarrage de votre machine réinitialise cette valeur à la valeur par défaut de 60. L'utilisation de la commande ci-dessus est temporaire pour une raison principale. Il permet aux utilisateurs Linux d'expérimenter les valeurs de swappiness qu'ils ont en tête avant de choisir une valeur fixe qu'ils ont l'intention d'utiliser de manière permanente.
Si vous voulez que la valeur de swappiness soit persistante même après un redémarrage réussi du système, vous aurez besoin pour inclure sa valeur définie dans le fichier de configuration système « /etc/sysctl.conf ». Pour la démonstration, considérez l'implémentation suivante de ce cas discuté via l'éditeur nano. Bien entendu, vous pouvez utiliser n'importe quel éditeur compatible Linux de votre choix.

$ sudo nano /etc/sysctl.conf

Lorsque ce fichier de configuration s'ouvre sur l'interface de votre terminal, faites défiler vers le bas et ajoutez une ligne de déclaration de variable contenant votre valeur de swappiness. Considérez l'implémentation suivante.

 
vm.swappiness=50

Enregistrez ce fichier et vous êtes prêt à partir. Votre prochain redémarrage du système utilisera cette nouvelle valeur d'échange définie.

Remarque finale

La complexité de la gestion de la mémoire en fait un rôle idéal pour le noyau du système car ce serait trop un casse-tête pour l'utilisateur moyen de Linux. Étant donné que la permutation est associée à la gestion de la mémoire, vous pouvez surestimer ou penser que vous utilisez trop de RAM. D'autre part, Linux trouve la RAM libre idéale pour les rôles système tels que la mise en cache du disque. Dans ce cas, la valeur de la mémoire "libre" sera artificiellement inférieure et la valeur de la mémoire "utilisée" artificiellement supérieure.

Pratiquement, cette proportionnalité des valeurs de mémoire libres et utilisées est jetable. Raison? La RAM libre qui se définit comme un cache disque est récupérable sur n'importe quelle instance du système. C'est parce que le noyau du système le signalera à la fois comme espace mémoire disponible et réutilisable.


Linux
  1. Podman contre Docker :tout ce que vous devez savoir

  2. Tout ce que vous devez savoir sur Ubuntu 13.04

  3. Répertoire Linux tmp :tout ce que vous devez savoir

  4. Compression de fichiers Linux :tout ce que vous devez savoir

  5. Autorisations de fichiers Linux :tout ce que vous devez savoir

Tout ce que vous devez savoir sur Black Lab Linux

Tout ce que vous devez savoir sur la distribution Linux Mint

Tout ce que vous devez savoir sur les inodes sous Linux

Tout ce que vous devez savoir sur le lien physique sous Linux

Tout ce que vous devez savoir sur l'UID sous Linux

Tout ce que vous devez savoir sur le répertoire Linux /tmp