Comment vérifier si un allocateur de mémoire du noyau spécifique est utilisé sous Linux

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), nous allons explorer comment vérifier si un allocateur de mémoire du noyau (kernel memory allocator) spécifique est utilisé sous Linux. Nous allons y parvenir en examinant les statistiques de l'allocateur, la configuration du noyau (kernel configuration) et les journaux du système (system logs).

Tout d'abord, nous utiliserons cat /proc/slabinfo pour afficher les statistiques de l'allocateur de slab du noyau (kernel slab allocator), ce qui nous donnera des informations sur la gestion de la mémoire (memory management). Ensuite, nous vérifierons l'allocateur en cours d'utilisation en inspectant le fichier de configuration du noyau (kernel configuration file) à l'aide de zcat /proc/config.gz. Enfin, nous examinerons les journaux de l'allocateur dans dmesg pour obtenir des informations pertinentes. Ces étapes vous aideront à comprendre comment identifier et vérifier l'allocateur de mémoire du noyau (kernel memory allocator) en cours d'utilisation.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558906{{"Comment vérifier si un allocateur de mémoire du noyau spécifique est utilisé sous Linux"}} linux/less -.-> lab-558906{{"Comment vérifier si un allocateur de mémoire du noyau spécifique est utilisé sous Linux"}} linux/grep -.-> lab-558906{{"Comment vérifier si un allocateur de mémoire du noyau spécifique est utilisé sous Linux"}} end

Vérifier les statistiques de l'allocateur avec cat /proc/slabinfo

Dans cette étape, nous allons explorer comment vérifier les statistiques de l'allocateur à l'aide de la commande cat /proc/slabinfo. Cette commande offre une vue détaillée de l'allocateur de slab du noyau (kernel slab allocator), qui est chargé de gérer efficacement la mémoire. Comprendre ces informations peut être utile pour déboguer les problèmes liés à la mémoire et optimiser les performances du système.

Tout d'abord, exécutons la commande :

cat /proc/slabinfo

Cette commande affichera une liste de caches de slab (slab caches), ainsi que leurs statistiques associées. La sortie peut sembler écrasante au premier abord, mais nous allons la décomposer.

Voici un exemple de ce que vous pourriez voir :

slabinfo - version: 2.1
kmem_cache            48     72    192    19    1    1
...
kmalloc-192           48     72    192    19    1    1
...

Chaque ligne représente un cache de slab. Les colonnes fournissent des informations sur le cache, telles que :

  • name : Le nom du cache de slab.
  • <active_objs> : Le nombre d'objets actifs dans le cache.
  • <num_objs> : Le nombre total d'objets dans le cache.
  • <objsize> : La taille de chaque objet en octets.
  • <objperslab> : Le nombre d'objets par slab.
  • <pagesperslab> : Le nombre de pages par slab.
  • <flags> : Les indicateurs associés au cache.

Le kmem_cache est un cache à usage général, tandis que kmalloc-192 est un cache pour les objets de taille 192 octets.

Pour rendre la sortie plus lisible, vous pouvez utiliser la commande less :

cat /proc/slabinfo | less

Cela vous permet de parcourir la sortie page par page. Appuyez sur q pour quitter less.

Vous pouvez également utiliser grep pour filtrer la sortie et vous concentrer sur des caches de slab spécifiques. Par exemple, pour trouver des informations sur le cache kmalloc-192, vous pouvez utiliser la commande suivante :

cat /proc/slabinfo | grep kmalloc-192

Cela affichera uniquement les lignes contenant "kmalloc-192".

En examinant la sortie de cat /proc/slabinfo, vous pouvez obtenir des informations sur la façon dont le noyau gère la mémoire et identifier les domaines potentiels d'optimisation.

Vérifier l'allocateur dans zcat /proc/config.gz

Dans cette étape, nous allons vérifier la configuration de l'allocateur en examinant le fichier de configuration du noyau (kernel configuration file), qui est généralement compressé et situé à l'emplacement /proc/config.gz. Ce fichier contient les options de configuration utilisées pour compiler le noyau, y compris celles liées à l'allocation de mémoire.

Tout d'abord, utilisons la commande zcat pour décompresser et afficher le contenu du fichier de configuration :

zcat /proc/config.gz

La commande zcat est similaire à cat, mais elle décompresse automatiquement les fichiers compressés au format gzip. La sortie sera une longue liste d'options de configuration du noyau.

Pour trouver les options liées à l'allocateur, nous pouvons utiliser grep pour filtrer la sortie. Par exemple, pour trouver les options liées à l'allocateur de slab, nous pouvons utiliser la commande suivante :

zcat /proc/config.gz | grep SLAB

Cela affichera les lignes contenant "SLAB". Vous pourriez voir quelque chose comme ceci :

CONFIG_SLAB=y
## CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLUB=y
## CONFIG_SLOB is not set

Ces options indiquent quel allocateur de slab est activé dans le noyau. CONFIG_SLAB=y indique que l'allocateur de slab original est activé, tandis que CONFIG_SLUB=y indique que l'allocateur SLUB est activé. Seul l'un de ces allocateurs devrait être activé. CONFIG_SLOB est un allocateur simplifié pour les systèmes embarqués.

Vous pouvez également rechercher d'autres options liées à l'allocateur, telles que celles liées à l'allocateur de pages (page allocator) ou au système buddy (buddy system). Par exemple :

zcat /proc/config.gz | grep PAGE_ALLOC

Cela affichera les options liées à l'allocation de pages.

En examinant le fichier de configuration du noyau, vous pouvez vérifier quel allocateur est utilisé et quelles options sont activées. Cela peut être utile pour comprendre le comportement de gestion de la mémoire du système.

Inspecter les journaux de l'allocateur dans dmesg

Dans cette étape, nous allons inspecter le tampon de messages du noyau (kernel message buffer) à l'aide de la commande dmesg pour rechercher les journaux liés à l'allocateur de mémoire. La commande dmesg affiche les messages du tampon circulaire du noyau (kernel ring buffer), qui peut contenir des informations précieuses sur les événements système, y compris l'allocation et la désallocation de mémoire.

Pour afficher les messages du noyau, tapez simplement :

dmesg

Cela produira une grande quantité de texte. Pour filtrer la sortie et vous concentrer sur les messages liés à l'allocateur, nous pouvons utiliser grep. Par exemple, pour trouver les messages liés à l'allocateur de slab, utilisez :

dmesg | grep slab

Vous pourriez voir une sortie similaire à celle-ci :

[    0.000000] SLUB: HWalign slab flags
[    1.234567] kmem_cache_create: slab created at <memory_address>

Ces messages peuvent fournir des informations sur la création, la destruction et d'autres événements liés aux caches de slab.

Vous pouvez également rechercher les messages liés aux échecs d'allocation de mémoire :

dmesg | grep alloc

Ou les messages liés aux situations de mémoire insuffisante (Out-Of-Memory - OOM) :

dmesg | grep OOM

Ces messages peuvent vous aider à diagnostiquer les problèmes liés à la mémoire.

Pour rendre la sortie plus gérable, vous pouvez utiliser less pour parcourir les messages :

dmesg | less

Appuyez sur q pour quitter less.

En examinant la sortie de dmesg, vous pouvez obtenir des informations sur le comportement de l'allocateur de mémoire et identifier les problèmes potentiels.

Résumé

Dans ce laboratoire (lab), nous avons exploré comment vérifier les statistiques de l'allocateur de mémoire du noyau (kernel memory allocator) à l'aide de la commande cat /proc/slabinfo. Cette commande offre une vue détaillée de l'allocateur de slab du noyau, affichant une liste des caches de slab et leurs statistiques associées, notamment le nom du cache, le nombre d'objets actifs et totaux, la taille des objets, le nombre d'objets par slab, le nombre de pages par slab et les indicateurs (flags).

Nous avons également appris à utiliser less pour rendre la sortie plus lisible et grep pour filtrer la sortie et nous concentrer sur des caches de slab spécifiques, comme kmalloc - 192. En examinant la sortie, nous pouvons obtenir des informations sur la manière dont le noyau gère la mémoire.