GNU/Linux >> Tutoriels Linux >  >> Linux

Une introduction à l'espace d'échange sur les systèmes Linux

Il existe deux types de mémoire de base dans un ordinateur typique. Le premier type, la mémoire vive (RAM), est utilisé pour stocker des données et des programmes pendant qu'ils sont activement utilisés par l'ordinateur. Les programmes et les données ne peuvent pas être utilisés par l'ordinateur à moins qu'ils ne soient stockés dans la RAM. La RAM est une mémoire volatile ; c'est-à-dire que les données stockées dans la RAM sont perdues si l'ordinateur est éteint.

Les disques durs sont des supports magnétiques utilisés pour le stockage à long terme de données et de programmes. Les supports magnétiques sont non volatils; les données stockées sur un disque restent même lorsque l'alimentation est coupée de l'ordinateur. Le CPU (unité centrale de traitement) ne peut pas accéder directement aux programmes et aux données du disque dur ; il doit d'abord être copié dans la RAM, et c'est là que le CPU peut accéder à ses instructions de programmation et aux données à exploiter par ces instructions. Pendant le processus de démarrage, un ordinateur copie des programmes spécifiques du système d'exploitation, tels que le noyau et init ou systemd, et les données du disque dur dans la RAM, où il est accessible directement par le processeur de l'ordinateur, le CPU.

Le deuxième type de mémoire dans les systèmes Linux modernes est l'espace d'échange.

Échange d'espace

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

La fonction principale de l'espace d'échange est de substituer l'espace disque à la mémoire RAM lorsque la vraie RAM se remplit et que plus d'espace est nécessaire.

Par exemple, supposons que vous ayez un système informatique avec 8 Go de RAM. Si vous démarrez des programmes qui ne remplissent pas cette RAM, tout va bien et aucun échange n'est nécessaire. Mais supposons que la feuille de calcul sur laquelle vous travaillez grandisse lorsque vous ajoutez plus de lignes, et que, plus tout ce qui est en cours d'exécution, remplit maintenant toute la RAM. Sans espace d'échange disponible, vous devriez arrêter de travailler sur la feuille de calcul jusqu'à ce que vous puissiez libérer une partie de votre RAM limitée en fermant d'autres programmes.

Le noyau utilise un programme de gestion de la mémoire qui détecte les blocs, c'est-à-dire les pages, de mémoire dont le contenu n'a pas été utilisé récemment. Le programme de gestion de la mémoire permute suffisamment de ces pages de mémoire relativement peu utilisées sur une partition spéciale du disque dur spécifiquement désignée pour la « pagination » ou la permutation. Cela libère de la RAM et fait de la place pour plus de données à saisir dans votre feuille de calcul. Ces pages de mémoire transférées sur le disque dur sont suivies par le code de gestion de la mémoire du noyau et peuvent être renvoyées dans la RAM si nécessaire.

La quantité totale de mémoire dans un ordinateur Linux est la RAM plus l'espace d'échange et est appelée mémoire virtuelle .

Types d'échange Linux

Linux fournit deux types d'espace d'échange. Par défaut, la plupart des installations Linux créent une partition d'échange, mais il est également possible d'utiliser un fichier spécialement configuré comme fichier d'échange. Une partition d'échange est exactement ce que son nom l'indique :une partition de disque standard désignée comme espace d'échange par le mkswap commande.

Un fichier d'échange peut être utilisé s'il n'y a pas d'espace disque libre dans lequel créer une nouvelle partition d'échange ou un espace dans un groupe de volumes où un volume logique peut être créé pour l'espace d'échange. Il s'agit simplement d'un fichier normal créé et préalloué à une taille spécifiée. Puis le mkswap La commande est exécutée pour le configurer en tant qu'espace d'échange. Je ne recommande pas d'utiliser un fichier pour l'espace d'échange à moins que cela ne soit absolument nécessaire.

La raclée

L'écrasement peut se produire lorsque la mémoire virtuelle totale, à la fois la RAM et l'espace d'échange, devient presque pleine. Le système passe tellement de temps à paginer des blocs de mémoire entre l'espace d'échange et la RAM et inversement qu'il reste peu de temps pour le travail réel. Les symptômes typiques de ceci sont évidents :le système devient lent ou ne répond plus du tout, et le voyant d'activité du disque dur est allumé presque constamment.

Si vous parvenez à émettre une commande comme free qui montre la charge du processeur et l'utilisation de la mémoire, vous verrez que la charge du processeur est très élevée, peut-être jusqu'à 30 à 40 fois le nombre de cœurs de processeur dans le système. Un autre symptôme est que la RAM et l'espace d'échange sont presque entièrement alloués.

Après coup, l'examen des données SAR (rapport d'activité du système) peut également montrer ces symptômes. J'installe SAR sur chaque système sur lequel je travaille et je l'utilise pour l'analyse médico-légale après réparation.

Quelle est la bonne quantité d'espace d'échange ?

Il y a de nombreuses années, la règle générale pour la quantité d'espace d'échange qui devait être allouée sur le disque dur était de 2 fois la quantité de RAM installée sur l'ordinateur (bien sûr, c'était à ce moment-là que la RAM de la plupart des ordinateurs était mesurée en Ko ou Mo) . Donc, si un ordinateur avait 64 Ko de RAM, une partition d'échange de 128 Ko serait une taille optimale. Cette règle tenait compte du fait que les tailles de RAM étaient généralement assez petites à l'époque et que l'allocation de plus de 2X de RAM pour l'espace d'échange n'améliorait pas les performances. Avec plus de deux fois la RAM pour le swap, la plupart des systèmes passaient plus de temps à se battre qu'à effectuer un travail utile.

La RAM est devenue une denrée peu coûteuse et la plupart des ordinateurs de nos jours ont des quantités de RAM qui s'étendent sur des dizaines de gigaoctets. La plupart de mes nouveaux ordinateurs ont au moins 8 Go de RAM, un a 32 Go et mon poste de travail principal a 64 Go. Mes anciens ordinateurs ont de 4 à 8 Go de RAM.

Lorsqu'il s'agit d'ordinateurs disposant d'énormes quantités de RAM, le facteur de performance limitant pour l'espace d'échange est bien inférieur au multiplicateur 2X. Le Guide d'installation en ligne de Fedora 28, qui peut être trouvé en ligne sur Guide d'installation de Fedora, définit la réflexion actuelle sur l'allocation d'espace de swap. J'ai inclus ci-dessous une discussion et le tableau des recommandations de ce document.

Le tableau suivant indique la taille recommandée d'une partition d'échange en fonction de la quantité de RAM de votre système et si vous souhaitez disposer de suffisamment de mémoire pour que votre système hiberne. La taille de partition d'échange recommandée est établie automatiquement lors de l'installation. Cependant, pour permettre l'hibernation, vous devrez modifier l'espace d'échange dans l'étape de partitionnement personnalisé.

Tableau 1 :Espace de swap système recommandé dans la documentation Fedora

Quantité de RAM système

Espace d'échange recommandé

Échange recommandé avec hibernation

moins de 2 Go

2 fois la quantité de RAM

3 fois la quantité de RAM

2 Go - 8 Go

Égal à la quantité de RAM

2 fois la quantité de RAM

8 Go - 64 Go

0,5 fois la quantité de RAM

1,5 fois la quantité de RAM

plus de 64 Go

selon la charge de travail

hibernation non recommandée

À la frontière entre chaque plage répertoriée ci-dessus (par exemple, un système avec 2 Go, 8 Go ou 64 Go de RAM système), faites preuve de discrétion en ce qui concerne l'espace d'échange choisi et la prise en charge de l'hibernation. Si les ressources de votre système le permettent, l'augmentation de l'espace d'échange peut améliorer les performances.

Bien sûr, la plupart des administrateurs Linux ont leurs propres idées sur la quantité appropriée d'espace de swap, ainsi que sur à peu près tout le reste. Le tableau 2 ci-dessous contient mes recommandations basées sur mes expériences personnelles dans plusieurs environnements. Ceux-ci peuvent ne pas fonctionner pour vous, mais comme pour le tableau 1, ils peuvent vous aider à démarrer.

Tableau 2 :Espace d'échange système recommandé par l'auteur

Quantité de RAM

Espace d'échange recommandé

≤ 2 Go

2X RAM

2 Go – 8 Go

=RAM

>8 Go

8 Go

Une considération dans les deux tableaux est qu'à mesure que la quantité de RAM augmente, au-delà d'un certain point, l'ajout de plus d'espace d'échange conduit simplement à une agitation bien avant que l'espace d'échange ne soit sur le point d'être rempli. Si vous avez trop peu de mémoire virtuelle tout en suivant ces recommandations, vous devez ajouter plus de RAM, si possible, plutôt que plus d'espace d'échange. Comme pour toutes les recommandations qui affectent les performances du système, utilisez ce qui convient le mieux à votre environnement spécifique. Cela prendra du temps et des efforts pour expérimenter et apporter des modifications en fonction des conditions de votre environnement Linux.

Ajout de plus d'espace d'échange à un environnement de disque non-LVM

En raison de l'évolution des exigences d'espace d'échange sur les hôtes sur lesquels Linux est déjà installé, il peut s'avérer nécessaire de modifier la quantité d'espace d'échange définie pour le système. Cette procédure peut être utilisée pour tout cas général où la quantité d'espace de swap doit être augmentée. Il suppose que l'espace disque disponible est suffisant. Cette procédure suppose également que les disques sont partitionnés en partitions "brutes" EXT4 et swap et n'utilisent pas la gestion des volumes logiques (LVM).

Les étapes de base à suivre sont simples :

  1. Désactivez l'espace d'échange existant.

  2. Créez une nouvelle partition d'échange de la taille souhaitée.

  3. Relisez la table de partition.

  4. Configurez la partition comme espace d'échange.

  5. Ajoutez la nouvelle partition/etc/fstab.

  6. Activez l'échange.

Un redémarrage ne devrait pas être nécessaire.

Pour des raisons de sécurité, avant de désactiver le swap, vous devez au moins vous assurer qu'aucune application n'est en cours d'exécution et qu'aucun espace de swap n'est utilisé. Le free ou top Les commandes peuvent vous dire si l'espace d'échange est utilisé. Pour être encore plus sûr, vous pouvez revenir au niveau d'exécution 1 ou au mode mono-utilisateur.

Désactivez la partition d'échange avec la commande qui désactive tout l'espace d'échange :

$ swapoff -a 

Affichez maintenant les partitions existantes sur le disque dur.

$ fdisk -l 

Cela affiche les tables de partition actuelles sur chaque lecteur. Identifiez la partition d'échange actuelle par numéro.

Démarrer fdisk en mode interactif avec la commande :

$ fdisk /dev/<device name> 

Par exemple :

$ fdisk /dev/sda 

À ce stade, fdisk est interactif et fonctionne uniquement sur le lecteur de disque spécifié.

Utilisez le fdisk p sous-commande pour vérifier qu'il y a suffisamment d'espace libre sur le disque pour créer la nouvelle partition d'échange. L'espace sur le disque dur est affiché en termes de blocs de 512 octets et de nombres de cylindres de début et de fin, vous devrez donc peut-être faire quelques calculs pour déterminer l'espace disponible entre et à la fin des partitions allouées.

Utilisez le n sous-commande pour créer une nouvelle partition de swap. fdisk vous demandera le cylindre de départ. Par défaut, il choisit le cylindre disponible portant le numéro le plus bas. Si vous souhaitez changer cela, tapez le numéro du cylindre de départ.

Le fdisk La commande vous permet désormais d'entrer la taille des partitions dans un certain nombre de formats, y compris le dernier numéro de cylindre ou la taille en octets, Ko ou Mo. Tapez 4000M, ce qui donnera environ 4 Go d'espace sur la nouvelle partition (par exemple), et appuyez sur Entrée.

Utilisez le p sous-commande pour vérifier que la partition a été créée comme vous l'avez spécifié. Notez que la partition ne sera probablement pas exactement celle que vous avez spécifiée, sauf si vous avez utilisé le numéro de cylindre de fin. Le fdisk La commande ne peut allouer de l'espace disque que par incréments sur des cylindres entiers, de sorte que votre partition peut être un peu plus petite ou plus grande que celle que vous avez spécifiée. Si la partition n'est pas ce que vous voulez, vous pouvez la supprimer et la recréer.

Il est maintenant nécessaire de spécifier que la nouvelle partition doit être une partition de swap. La sous-commande t permet de spécifier le type de partition. Entrez donc t , spécifiez le numéro de partition et lorsqu'il vous demande le type de partition de code hexadécimal, tapez 82, qui est le type de partition d'échange Linux, et appuyez sur Entrée.

Lorsque vous êtes satisfait de la partition que vous avez créée, utilisez le w sous-commande pour écrire la nouvelle table de partition sur le disque. Le fdisk programme se fermera et vous ramènera à l'invite de commande après avoir terminé l'écriture de la table de partition révisée. Vous recevrez probablement le message suivant en tant que fdisk termine l'écriture de la nouvelle table de partition :

La table de partition a été modifiée !
Appel de ioctl() pour relire la table de partition.
ATTENTION :La relecture de la table de partition a échoué avec l'erreur 16 :Périphérique ou ressource occupé.
Le noyau utilise toujours l'ancienne table.
La nouvelle table sera utilisée au prochain redémarrage.
Synchronisation des disques.

À ce stade, vous utilisez le partprobe commande pour forcer le noyau à relire la table des partitions afin qu'il ne soit pas nécessaire d'effectuer un redémarrage.

$ partprobe 

Utilisez maintenant la commande fdisk -l pour répertorier les partitions et la nouvelle partition d'échange doit figurer parmi celles répertoriées. Assurez-vous que le nouveau type de partition est "Linux swap".

Il faudra modifier le fichier /etc/fstab pour qu'il pointe vers la nouvelle partition de swap. La ligne existante peut ressembler à ceci :

LABEL=SWAP-sdaX   swap        swap    defaults        0 0 

X est le numéro de la partition. Ajoutez une nouvelle ligne qui ressemble à ceci, en fonction de l'emplacement de votre nouvelle partition d'échange :

/dev/sdaY         swap        swap    defaults        0 0 

Assurez-vous d'utiliser le bon numéro de partition. Vous pouvez maintenant effectuer la dernière étape de la création de la partition d'échange. Utilisez le mkswap commande pour définir la partition en tant que partition de swap.

$ mkswap /dev/sdaY 

La dernière étape consiste à activer le swap à l'aide de la commande :

$ swapon -a 

Votre nouvelle partition swap est maintenant en ligne avec la partition swap précédemment existante. Vous pouvez utiliser le free ou top commandes pour le vérifier.

Ajout d'un swap à un environnement de disque LVM

Si votre configuration de disque utilise LVM, la modification de l'espace d'échange sera assez facile. Encore une fois, cela suppose que de l'espace est disponible dans le groupe de volumes dans lequel se trouve le volume d'échange actuel. Par défaut, les procédures d'installation de Fedora Linux dans un environnement LVM créent la partition d'échange en tant que volume logique. Cela facilite les choses car vous pouvez simplement augmenter la taille du volume d'échange.

Voici les étapes nécessaires pour augmenter la quantité d'espace d'échange dans un environnement LVM :

  1. Désactivez tous les échanges.

  2. Augmentez la taille du volume logique désigné pour le swap.

  3. Configurez le volume redimensionné comme espace d'échange.

  4. Activez l'échange.

Tout d'abord, vérifiez que le swap existe et est un volume logique en utilisant le lvs commande (liste des volumes logiques).

 # LVS 
LV VG VG LSIZE POISIÈRE DONNÉES DONNÉES DE LA POISION ENTERMENT META% METMENT MODIFIER LOG DE LOG DE CPY% SYNC Convertir
Accueil Fedora_StudentVM1 -WI-AO ---- 2.00g
Pool00 Fedora_Studentvm1 Twi-Aotz - 2.00g 8.17 2.93
FEDORA_STOUDENTVM1 VWI-AOTZ-- 2.00g Pool0000 8,17
Swap Fedora_Studentvm1 -WI-AO ---- 8.00g
TMP Fedora_Studentvm1 -WI-AO --- - 5.00g
USR FedORA_STOUDENTVM1 -WI-AO ---- 15.00g
Var Fedora_Studentvm1 -WI-AO ---- 10.00g

Vous pouvez voir que la taille d'échange actuelle est de 8 Go. Dans ce cas, nous voulons ajouter 2 Go à ce volume d'échange. Tout d'abord, arrêtez l'échange existant. Vous devrez peut-être arrêter les programmes en cours d'exécution si l'espace d'échange est utilisé.

$ swapoff -a 

Augmentez maintenant la taille du volume logique.

# lvextend -L +2G /dev/mapper/fedora_studentvm1-swap
  La taille du volume logique fedora_studentvm1/swap est passée de 8,00 Gio (2 048 extensions) à 10,00 Gio (2 560 extensions).
  Volume logique fedora_studentvm1/swap redimensionné avec succès.

Exécutez le mkswap commande pour transformer toute cette partition de 10 Go en espace d'échange.

# mkswap /dev/mapper/fedora_studentvm1-swap
mkswap :/dev/mapper/fedora_studentvm1-swap :avertissement :effacement de l'ancienne signature d'échange.
Configuration de l'espace d'échange version 1, taille =10 Gio ( 10737414144 octets)
pas d'étiquette, UUID=3cc2bee0-e746-4b66-aa2d-1ea15ef1574a

Réactivez l'échange.

# swapon -a 

Vérifiez maintenant que le nouvel espace d'échange est présent avec la commande list block devices. Encore une fois, un redémarrage n'est pas nécessaire.

 # LSBLK 
Nom Maj:Min RM Taille Type RO Point de vue de type RO
SDA 8:0 0 0 60G 0 Disque
| -SDA1 8:1 0 1G 0 Pièce / Boot
`-sda2                               8:2    0   59G  0 part
  |-fedora_studentvm1-pool00_tmeta   253:0    0    4M  0 lvm  
  | `-fedora_studentvm1-pool00-tpool 253:2    0    2G  0 lvm  
  | |-fedora_studentvm1-root       253:3    0    2G  0 lvm  /
  | `-fedora_studentvm1-pool00     253:6    0    2G  0 lvm  
  |-fedora_studentvm1-pool00_tdata   253:1    0    2G  0 lvm  
  | `-fedora_studentvm1-pool00-tpool 253:2    0    2G  0 lvm  
  | |-fedora_studentvm1-root       253:3    0    2G  0 lvm  /
  | `-fedora_studentvm1-piscine00 253:6 0 2g 0 lvm
| -fedora_studentvm1-Swap 253:4 0 10g 0 lvm [Swap]
| Feedora_Studentvm1-usr 253:5 0 15g 0 lvm / usr
| Feedora_StudentVM1-Home 253:7 0 2G 0 LVM / HOME
| -FEDORA_STOUDENTVM1-VAR 253:8 0 10G 0 LVM / VAR
`-FEDORA_STOUDENTVM1-TMP 253:9 0 5G 0 lvm  /tmp
sr0

Vous pouvez également utiliser le swapon -s commande, ou top , free , ou l'une de plusieurs autres commandes pour vérifier cela.

 # # 
Total usagé Buff / cache partagé gratuit disponible
MEM:4038808 382404 2754072 4152 902332 3404184
Swap:10485756 0 10485756

Notez que les différentes commandes affichent ou nécessitent en entrée le fichier spécial de l'appareil sous différentes formes. Il existe plusieurs manières d'accéder à des périphériques spécifiques dans le répertoire /dev. Mon article, Gestion des périphériques sous Linux, inclut plus d'informations sur le répertoire /dev et son contenu.


Cet article a été initialement publié en septembre 2018 et a été mis à jour avec des informations supplémentaires par l'éditeur.


Linux
  1. Quelle est la bonne quantité d'espace de swap pour un système Linux moderne ?

  2. 13 tutoriels de sécurité Linux

  3. Créer un fichier d'échange Linux

  4. Comment augmenter l'espace d'échange sous Linux

  5. 3 façons d'augmenter l'espace d'échange sous Linux

Une introduction au navigateur Vivaldi sous Linux

Quelle quantité d'échange devriez-vous utiliser sous Linux ?

Comment effacer le cache RAM, le tampon et l'espace d'échange sur le système Linux

5 commandes pour vérifier l'espace d'échange sous Linux

Comment effacer le cache et la mémoire tampon de la mémoire RAM et l'espace d'échange sous Linux

Comment vérifier l'espace d'échange sous Linux