Comment vérifier si un paramètre slab spécifique du noyau est actif 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), vous apprendrez à vérifier si un paramètre spécifique du noyau (kernel) slab est actif sous Linux. Vous explorerez différentes méthodes pour inspecter la gestion de la mémoire du noyau, en particulier en vous concentrant sur l'allocateur slab.

Le laboratoire vous guidera tout au long de la vérification des statistiques slab à l'aide de /proc/slabinfo, de la vérification des paramètres associés avec sysctl vm, et de l'inspection des journaux pertinents dans dmesg. Ces étapes vous fourniront les compétences nécessaires pour comprendre et résoudre les problèmes liés au comportement du noyau slab.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558759{{"Comment vérifier si un paramètre slab spécifique du noyau est actif sous Linux"}} linux/cat -.-> lab-558759{{"Comment vérifier si un paramètre slab spécifique du noyau est actif sous Linux"}} linux/grep -.-> lab-558759{{"Comment vérifier si un paramètre slab spécifique du noyau est actif sous Linux"}} linux/env -.-> lab-558759{{"Comment vérifier si un paramètre slab spécifique du noyau est actif sous Linux"}} end

Vérifier les statistiques slab avec cat /proc/slabinfo

Dans cette étape, vous apprendrez à inspecter les statistiques de l'allocateur slab du noyau (kernel) à l'aide du fichier /proc/slabinfo. L'allocateur slab est un mécanisme de gestion de mémoire utilisé par le noyau Linux pour gérer efficacement les petits objets. Comprendre l'utilisation du slab peut être utile pour diagnostiquer les problèmes liés à la mémoire.

Le système de fichiers /proc est un système de fichiers virtuel qui fournit des informations sur les processus et d'autres informations système. /proc/slabinfo contient spécifiquement des détails sur les caches slab du noyau.

Pour afficher le contenu de /proc/slabinfo, vous utiliserez la commande cat. cat est une utilitaire standard Unix qui lit les fichiers séquentiellement et les écrit sur la sortie standard.

Ouvrez votre terminal s'il n'est pas déjà ouvert. Vous pouvez le faire en cliquant sur l'icône Xfce Terminal sur le côté gauche du bureau.

Maintenant, tapez la commande suivante et appuyez sur Entrée :

cat /proc/slabinfo

Vous verrez une sortie similaire à celle-ci (le contenu exact variera en fonction de l'activité du système) :

slabinfo - version: 2.1
## name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_expect      0      0    128   63    1 : tunables    0    0    0 : slabdata      0      0      0
nf_conntrack      10     10    320   25    2 : tunables    0    0    0 : slabdata      1      1      0
request_sock_TCP      0      0    192   42    1 : tunables    0    0    0 : slabdata      0      0      0
... (beaucoup d'autres lignes)

Décortiquons la sortie :

  • name : Le nom du cache slab (par exemple, nf_conntrack, request_sock_TCP).
  • <active_objs> : Le nombre d'objets actuellement utilisés dans ce cache.
  • <num_objs> : Le nombre total d'objets alloués dans ce cache.
  • : La taille de chaque objet en octets.
  • : Le nombre d'objets qui peuvent tenir dans un seul slab.
  • : Le nombre de pages mémoire utilisées par un seul slab.
  • tunables : Paramètres qui peuvent être ajustés pour ce cache.
  • slabdata : Informations sur les slabs eux-mêmes.

Cette sortie fournit un instantané de la façon dont le noyau utilise la mémoire pour diverses structures de données internes. Bien que la sortie brute puisse être volumineuse, c'est une source d'information fondamentale pour la résolution avancée de problèmes sous Linux.

Vous avez réussi à afficher les statistiques de l'allocateur slab. Cliquez sur Continuer pour passer à l'étape suivante.

Vérifier les paramètres slab avec sysctl vm

Dans cette étape, vous explorerez les paramètres du noyau (kernel) liés à la mémoire virtuelle et à l'allocateur slab à l'aide de la commande sysctl. sysctl est un utilitaire qui vous permet de visualiser et de modifier les paramètres du noyau à l'exécution.

Les paramètres du noyau sont des options de configuration qui affectent le comportement du noyau Linux. De nombreux paramètres se trouvent dans le système de fichiers /proc/sys. sysctl offre un moyen pratique d'accéder et de gérer ces paramètres sans interagir directement avec les fichiers dans /proc/sys.

Nous sommes intéressés par les paramètres liés à la mémoire virtuelle, qui incluent souvent des paramètres qui influencent la gestion de la mémoire, y compris certains aspects de l'allocateur slab. Ces paramètres sont généralement regroupés sous l'arborescence vm.

Pour afficher tous les paramètres du noyau liés à la mémoire virtuelle, utilisez la commande sysctl avec l'argument vm :

sysctl vm

Tapez la commande dans votre terminal et appuyez sur Entrée. Vous verrez une liste de paramètres et de leurs valeurs actuelles, similaire à ceci :

vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.compact_memory = 0
vm.compact_unevictable_percentage = 1
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirtytime_expire_seconds = 43200
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.highmem_is_dirtyable = 0
vm.laptop_mode = 0
vm.lowmem_reserve_ratio = 256   256     32      0       0
vm.max_map_count = 65530
vm.min_free_kbytes = 67584
vm.min_slab_ratio = 5
vm.min_unmapped_ratio = 1
vm.mmap_min_addr = 65536
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
vm.numa_balancing = 1
vm.numa_balancing_scan_delay_ms = 1000
vm.numa_balancing_scan_period_min_ms = 20
vm.numa_balancing_scan_period_max_ms = 10000
vm.numa_balancing_scan_size_mb = 32
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.panic_on_oom = 0
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 60
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100

Recherchez les paramètres qui pourraient être liés à la mise en cache ou à la pression mémoire, tels que vm.vfs_cache_pressure ou vm.min_slab_ratio. Ces paramètres peuvent influencer la façon dont le noyau gère différents types de caches, y compris les caches slab.

Vous pouvez également afficher un paramètre spécifique en fournissant son nom complet. Par exemple, pour voir la valeur de vm.vfs_cache_pressure :

sysctl vm.vfs_cache_pressure

Cette commande affichera :

vm.vfs_cache_pressure = 100

Le paramètre vm.vfs_cache_pressure contrôle la tendance du noyau à récupérer la mémoire utilisée pour la mise en cache des objets de répertoire et d'inode. Une valeur plus élevée signifie que le noyau est plus agressif pour récupérer cette mémoire.

Comprendre ces paramètres peut vous aider à ajuster le comportement de la mémoire de votre système.

Cliquez sur Continuer pour passer à l'étape suivante.

Inspecter les journaux slab dans dmesg

Dans cette étape finale, vous apprendrez à vérifier le tampon de messages du noyau (kernel) pour les messages liés à l'allocateur slab à l'aide de la commande dmesg. Le tampon de messages du noyau stocke les messages produits par le noyau lors du démarrage et de l'exécution. Ces messages peuvent inclure des informations sur le matériel, les pilotes de périphériques et les sous-systèmes du noyau comme l'allocateur slab.

La commande dmesg est utilisée pour afficher ou contrôler le tampon circulaire du noyau. Ce tampon contient les messages du noyau, qui sont souvent utiles pour le débogage et la résolution de problèmes.

Pour afficher l'ensemble du tampon de messages du noyau, vous pouvez simplement exécuter dmesg :

dmesg

Cependant, la sortie peut être très longue. Pour trouver les messages spécifiquement liés à l'allocateur slab, vous pouvez rediriger la sortie de dmesg vers la commande grep et rechercher des mots-clés comme "slab" ou "SLUB" (SLUB est une implémentation moderne de l'allocateur slab).

Tapez la commande suivante dans votre terminal et appuyez sur Entrée :

dmesg | grep -i "slab\|slub"

Décortiquons cette commande :

  • dmesg : Affiche le tampon de messages du noyau.
  • | : C'est un tuyau (pipe) qui envoie la sortie de la commande de gauche en tant qu'entrée à la commande de droite.
  • grep : Un utilitaire en ligne de commande pour rechercher dans des ensembles de données texte brut les lignes qui correspondent à une expression régulière.
  • -i : Cette option rend la recherche insensible à la casse, donc elle correspondra à "slab", "SLAB", "slub", "SLUB", etc.
  • "slab\|slub" : C'est le modèle de recherche. slab recherche le mot "slab", \| agit comme un opérateur OU, et slub recherche le mot "slub".

La sortie affichera toutes les lignes du tampon de messages du noyau qui contiennent "slab" ou "slub" (insensible à la casse). Vous pourriez voir des messages liés à l'initialisation de l'allocateur slab lors du démarrage, ou des avertissements ou des erreurs potentielles s'il y a des problèmes.

[    0.000000] kmem_cache_init
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] SLUB: TotalObjects=0, ObjectsPerSpan=0, SpansPerChunk=0
[    0.000000] SLUB: min_objects.limit=0, min_objects.batchcount=0
[    0.000000] SLUB: tunables.limit=0, tunables.batchcount=0, tunables.sharedfactor=0
[    0.000000] SLUB: Not setting slab_nomerge.
[    0.000000] SLUB: Not setting slab_debug.
[    0.000000] SLUB: Not setting slab_max_order.
[    0.000000] SLUB: Not setting slab_alias_debug.
[    0.000000] SLUB: Not setting slab_pad.
[    0.000000] SLUB: Not setting slab_red_zone.
[    0.000000] SLUB: Not setting slab_poison.
[    0.000000] SLUB: Not setting slab_freelist_debug.
[    0.000000] SLUB: Not setting slab_freelist_random.
[    0.000000] SLUB: Not setting slab_freelist_hardened.
[    0.000000] SLUB: Not setting slab_trace.
[    0.000000] SLUB: Not setting slab_reclaim_account.
[    0.000000] SLUB: Not setting slab_way.
[    0.000000] SLUB: Not setting slab_sizes.
[    0.000000] SLUB: Not setting slab_caches.
[    0.000000] SLUB: Not setting slab_test.
[    0.000000] SLUB: Not setting slab_order.
[    0.000000] SLUB: Not setting slab_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_memcg.
[    0.000000] SLUB: Not setting slab_debug_check_objects.
[    0.000000] SLUB: Not setting slab_debug_check_freelist.
[    0.000000] SLUB: Not setting slab_debug_check_alloc.
[    0.000000] SLUB: Not setting slab_debug_check_free.
[    0.000000] SLUB: Not setting slab_debug_check_redzone.
[    0.000000] SLUB: Not setting slab_debug_check_poison.
[    0.000000] SLUB: Not setting slab_debug_check_trace.
[    0.000000] SLUB: Not setting slab_debug_check_reclaim_account.
[    0.000000] SLUB: Not setting slab_debug_check_way.
[    0.000000] SLUB: Not setting slab_debug_check_sizes.
[    0.000000] SLUB: Not setting slab_debug_check_caches.
[    0.000000] SLUB: Not setting slab_debug_check_test.
[    0.000000] SLUB: Not setting slab_debug_check_order.
[    0.000000] SLUB: Not setting slab_debug_check_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_memcg.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_freelist.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_alloc.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_free.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_redzone.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_poison.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_trace.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_reclaim_account.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_way.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_sizes.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_caches.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_test.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_order.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_debug_memcg.

Cette commande est un moyen puissant de filtrer les messages du noyau et de trouver des informations pertinentes pour résoudre les problèmes de sous-systèmes spécifiques du noyau.

Vous avez maintenant appris à inspecter les statistiques slab, à vérifier les paramètres du noyau associés et à vérifier les journaux du noyau pour les messages liés au slab. Ce sont des compétences fondamentales pour comprendre et diagnostiquer l'utilisation de la mémoire sous Linux.

Cliquez sur Continuer pour terminer ce laboratoire.

Résumé

Dans ce laboratoire, vous avez appris à vérifier les paramètres slab du noyau (kernel) sous Linux. Vous avez commencé par inspecter les statistiques de l'allocateur slab du noyau à l'aide du fichier /proc/slabinfo, qui fournit des détails sur les objets actifs, le nombre total d'objets, la taille des objets et d'autres informations pertinentes pour différents caches slab. Cette étape a montré comment utiliser la commande cat pour afficher ces données cruciales de gestion de la mémoire.

Ensuite, vous avez vérifié les paramètres slab à l'aide de la commande sysctl vm, qui vous permet d'examiner et de modifier les paramètres du noyau liés à la mémoire virtuelle, y compris les paramètres spécifiques au slab. Enfin, vous avez appris à inspecter les journaux liés au slab dans dmesg, le tampon de messages du noyau, pour identifier toute erreur ou avertissement lié à l'allocateur slab. Ces étapes fournissent ensemble une approche complète pour comprendre et résoudre les problèmes liés au comportement du slab du noyau.