Votre système Linux ou macOS utilise la mémoire virtuelle pour gérer l’allocation de mémoire. Cet article explore l’impact de cette mémoire virtuelle sur l’utilisation de la mémoire physique, du processeur, et des ressources de votre disque dur.
Comprendre la mémoire virtuelle
Un ordinateur est doté d’une quantité limitée de mémoire physique, communément appelée mémoire vive (RAM). Cette mémoire RAM est gérée par le noyau du système et partagée entre le système d’exploitation et toutes les applications en cours d’exécution. Mais que se passe-t-il lorsque les demandes cumulées dépassent la capacité de la RAM physique?
Les systèmes d’exploitation basés sur Linux et Unix, comme macOS, utilisent l’espace disponible sur votre disque dur pour gérer les demandes de mémoire. Une zone réservée du disque dur, appelée « espace de swap » ou « mémoire d’échange », est utilisée comme une extension de la RAM. C’est ce que l’on appelle la mémoire virtuelle.
Le noyau Linux peut transférer des blocs de données de la RAM vers l’espace de swap, libérant ainsi de la RAM pour d’autres processus. La mémoire ainsi déplacée, ou « paginée », peut être récupérée de l’espace de swap et restaurée dans la RAM lorsque nécessaire.
Toutefois, la vitesse d’accès à la mémoire paginée est considérablement plus lente que celle de la RAM. De plus, l’utilisation de la mémoire virtuelle impose un surcroît de travail à l’ensemble du système. Bien qu’elle permette à Linux de gérer les demandes de mémoire, cela a des conséquences sur les performances.
Votre disque dur effectue davantage d’opérations de lecture et d’écriture. Le noyau, et par conséquent le processeur, doit travailler plus intensivement pour gérer ces transferts entre la RAM et l’espace de swap. Il faut jongler avec ces échanges de données afin de répondre aux besoins en mémoire de chaque processus.
Linux permet de surveiller cette activité grâce à la commande vmstat
, qui fournit des statistiques détaillées sur la mémoire virtuelle.
La commande vmstat en détail
L’exécution de vmstat
sans paramètres affiche un ensemble de valeurs. Ces valeurs représentent des moyennes des statistiques depuis le dernier démarrage de votre machine, et non pas des valeurs instantanées.
vmstat
Un tableau de données concis apparaît.
Les colonnes affichées sont intitulées « Procs », « Memory », « Swap », « IO », « System » et « CPU ». La colonne la plus à droite, « CPU », contient les informations relatives à l’utilisation du processeur.
Voici une explication de chaque élément de données dans ces colonnes :
Procs
- r: Le nombre de processus exécutables. Ces processus sont actifs, en cours d’exécution, ou en attente d’une allocation de temps CPU.
- b: Le nombre de processus en sommeil interrompu. Ces processus sont bloqués par un appel système et ne peuvent être interrompus tant que leur action actuelle n’est pas terminée. Ce sont généralement des pilotes de périphériques en attente de ressources disponibles. Une fois la ressource disponible, ils reprennent leur activité.
Memory
- swpd: La quantité de mémoire virtuelle actuellement utilisée (mémoire qui a été transférée vers l’espace de swap).
- free: La quantité de mémoire inactive, c’est-à-dire la mémoire qui n’est pas utilisée.
- buff: La quantité de mémoire utilisée comme tampons.
- cache: La quantité de mémoire utilisée comme cache.
Swap
- si: La quantité de mémoire virtuelle transférée depuis l’espace de swap vers la RAM.
- so: La quantité de mémoire virtuelle transférée de la RAM vers l’espace de swap.
IO
- bi: Le nombre de blocs reçus d’un périphérique de stockage, représentant la mémoire virtuelle ramenée en RAM.
- bo: Le nombre de blocs envoyés à un périphérique de stockage, représentant la mémoire virtuelle transférée de la RAM vers l’espace de swap.
System
- in: Le nombre d’interruptions par seconde, incluant les interruptions de l’horloge.
- cs: Le nombre de changements de contexte par seconde. Un changement de contexte a lieu quand le noyau passe du mode système au mode utilisateur.
CPU
Ces valeurs sont exprimées en pourcentages du temps total d’utilisation du CPU.
- us: Le temps passé à exécuter du code non-noyau, donc du temps utilisateur et des processus normaux.
- sy: Le temps passé à exécuter du code du noyau.
- id: Le temps où le processeur est resté inactif.
- wa: Le temps passé à attendre des opérations d’entrée/sortie (I/O).
- st: Le temps « volé » par une machine virtuelle sur un système virtualisé, lorsque l’hyperviseur prend du temps pour gérer d’autres machines virtuelles.
Utilisation d’un intervalle de temps
vmstat
peut également être utilisé pour afficher des mises à jour régulières des statistiques à l’aide d’une valeur de délai en secondes. Par exemple, pour afficher les mises à jour toutes les cinq secondes, utilisez la commande :
vmstat 5
vmstat
ajoutera une nouvelle ligne de données au tableau toutes les cinq secondes. Pour arrêter cette mise à jour continue, appuyez sur Ctrl + C.
Utilisation d’une valeur de comptage
L’utilisation d’un intervalle de temps trop court peut surcharger votre système. Pour effectuer des diagnostics en temps réel, il est conseillé d’utiliser une valeur de comptage conjointement avec la valeur de délai. La valeur de comptage indique à vmstat
le nombre de mises à jour à afficher avant de retourner à l’invite de commande. Sans valeur de comptage, vmstat
continue jusqu’à ce que vous l’arrêtiez (Ctrl + C).
Pour que vmstat
affiche une mise à jour toutes les cinq secondes, pour un total de quatre mises à jour, utilisez la commande suivante:
vmstat 5 4
Après quatre mises à jour, vmstat
s’arrête automatiquement.
Changer les unités d’affichage
Vous pouvez afficher les statistiques de mémoire et de swap en kilo-octets ou mégaoctets en utilisant l’option -S
suivie de l’unité souhaitée (k, K, m, M) :
- k: 1000 octets
- K: 1024 octets
- m: 1000000 octets
- M: 1048576 octets
Pour afficher les statistiques toutes les 10 secondes, avec les statistiques de mémoire et de swap en mégaoctets, utilisez la commande :
vmstat 10 -S M
Les statistiques de mémoire et de swap sont maintenant affichées en mégaoctets. Notez que l’option -S n’affecte pas les statistiques de bloc d’E/S qui restent affichées en blocs.
Mémoire active et inactive
L’option -a
(active) remplace les colonnes de mémoire tampon et de cache par les colonnes « inact » et « active ». Ces colonnes affichent la quantité de mémoire inactive et active respectivement.
Pour afficher ces colonnes à la place de buff
et cache
, utilisez l’option -a
comme suit :
vmstat 5 -a -S M
Les colonnes « inactive » et « active » sont affectées par l’option -S
(unité).
Fourches
L’option -f
affiche le nombre de fourches (processus créés) depuis le démarrage de l’ordinateur.
Autrement dit, cela montre combien de tâches ont été lancées (et pour la plupart, fermées) depuis le démarrage du système. Chaque processus lancé à partir de la ligne de commande incrémente ce nombre. Chaque fois qu’une tâche ou un processus génère une nouvelle tâche (ou clone), ce nombre augmente.
vmstat -f
L’affichage des fourches ne se met pas à jour.
Affichage de Slabinfo
Le noyau a sa propre gestion de mémoire à gérer en plus de la gestion de la mémoire pour le système d’exploitation et toutes les applications.
Comme vous pouvez l’imaginer, le noyau alloue et désalloue de la mémoire de façon constante pour les nombreux types d’objets qu’il doit gérer. Pour rendre cette gestion aussi efficace que possible, il utilise un système de « dalles » (slabs). Ce système est une forme de mise en cache.
La mémoire allouée, utilisée et non requise pour un type spécifique d’objet de données du noyau, peut être réutilisée pour un autre objet de données du même type sans être désallouée et réallouée. Imaginez les dalles comme des segments de RAM pré-alloués et adaptés aux besoins spécifiques du noyau.
Pour afficher les statistiques des dalles, utilisez l’option -m
. Vous devrez utiliser la commande sudo
, et entrer votre mot de passe. Puisque la sortie peut être longue, elle est dirigée vers less
.
sudo vmstat -m | less
La sortie comporte cinq colonnes :
- Cache: le nom du cache.
- num: le nombre d’objets actuellement actifs dans ce cache.
- total: le nombre total d’objets disponibles dans ce cache.
- size: la taille de chaque objet dans le cache.
- pages: le nombre total de pages mémoire qui ont (au moins) un objet associé à ce cache.
Appuyez sur la touche q
pour quitter less
.
Affichage des compteurs d’événements et statistiques de mémoire
Pour afficher une page de compteurs d’événements et de statistiques de mémoire, utilisez l’option -s
(minuscule).
vmstat -s
Bien que la plupart des statistiques soient les mêmes que celles de la sortie par défaut de vmstat
, certaines sont détaillées davantage.
Par exemple, la sortie par défaut combine le temps CPU de l’utilisateur « gentil » et non « gentil » dans la colonne us
. L’affichage -s
liste ces statistiques séparément.
Affichage des statistiques de disque
Vous pouvez obtenir une liste de statistiques de disque en utilisant l’option -d
(disque), dont la sortie est souvent dirigée vers less
en raison de sa longueur:
vmstat -d | less
Pour chaque disque, trois colonnes sont affichées : les lectures, les écritures et l’I/O.
La colonne « IO » est la plus à droite. Notez que la colonne sec
dans « IO » est mesurée en secondes, alors que les temps dans les colonnes de « lecture » et « écriture » sont mesurés en millisecondes.
Voici une explication des colonnes :
Lit
- total: nombre total de lectures sur le disque.
- fusionné: nombre total de lectures fusionnées (regroupées).
- secteurs: nombre total de secteurs lus.
- ms: temps total en millisecondes passé à lire les données du disque.
Écrit
- total: nombre total d’écritures sur le disque.
- fusionné: nombre total d’écritures fusionnées (regroupées).
- secteurs: nombre total de secteurs écrits.
- ms: temps total en millisecondes passé à écrire des données sur le disque.
IO
- cur: nombre de lectures ou écritures sur le disque en cours.
- sec: temps passé en secondes pour toutes les opérations de lecture ou d’écriture en cours.
Affichage des statistiques récapitulatives de disque
Pour un affichage rapide des statistiques récapitulatives de l’activité de votre disque, utilisez l’option -D
(disk-sum), en majuscule :
vmstat -D
Le nombre de disques peut sembler anormalement élevé. L’ordinateur utilisé pour cet article est sous Ubuntu. Avec Ubuntu, lorsqu’une application est installée à partir d’un Snap, un pseudo-système de fichiers squashfs est créé, et attaché à un périphérique /dev/loop
.
Malheureusement, ces entrées de périphériques sont souvent comptabilisées comme des disques durs par de nombreuses commandes et utilitaires Linux.
Affichage des statistiques de partition
Pour afficher les statistiques relatives à une partition spécifique, utilisez l’option -p
(partition) suivie de l’identificateur de partition. Dans l’exemple ci-dessous, on surveille la partition sda1. Le chiffre 1 indique qu’il s’agit de la première partition du périphérique sda, le disque dur principal de cette machine.
vmstat -p sda1
Les informations renvoyées indiquent le nombre total de lectures et d’écritures sur disque depuis et vers cette partition, ainsi que le nombre de secteurs concernés par ces actions.
Un aperçu sous le capot
Il est toujours enrichissant d’explorer les mécanismes internes de votre système. Parfois, vous cherchez à résoudre un problème, et parfois c’est simplement la curiosité de savoir comment votre machine fonctionne.
vmstat
vous offre une grande quantité d’informations utiles. Vous savez désormais comment y accéder et comment les interpréter. Gardez à l’esprit que lorsque vous devez retrousser vos manches et réaliser des diagnostics, vmstat
peut devenir votre allié.