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.
Vérifiez 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érifiez 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.
Inspectez 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.



