Inspeccionar los registros del slab en dmesg
En este último paso, aprenderás cómo verificar el buffer de mensajes del kernel en busca de mensajes relacionados con el asignador slab utilizando el comando dmesg
. El buffer de mensajes del kernel almacena los mensajes producidos por el kernel durante el arranque y la ejecución. Estos mensajes pueden incluir información sobre el hardware, controladores de dispositivos y subsistemas del kernel como el asignador slab.
El comando dmesg
se utiliza para imprimir o controlar el buffer circular del kernel. Este buffer contiene mensajes del kernel, que a menudo son útiles para la depuración y la resolución de problemas.
Para ver todo el buffer de mensajes del kernel, simplemente puedes ejecutar dmesg
:
dmesg
Sin embargo, la salida puede ser muy larga. Para encontrar mensajes específicamente relacionados con el asignador slab, puedes canalizar la salida de dmesg
al comando grep
y buscar palabras clave como "slab" o "SLUB" (SLUB es una implementación moderna del asignador slab).
Escribe el siguiente comando en tu terminal y presiona Enter:
dmesg | grep -i "slab\|slub"
Desglosemos este comando:
dmesg
: Imprime el buffer de mensajes del kernel.
|
: Este es un pipe, que envía la salida del comando de la izquierda como entrada al comando de la derecha.
grep
: Una utilidad de línea de comandos para buscar conjuntos de datos de texto plano en busca de líneas que coincidan con una expresión regular.
-i
: Esta opción hace que la búsqueda sea insensible a mayúsculas y minúsculas, por lo que coincidirá con "slab", "SLAB", "slub", "SLUB", etc.
"slab\|slub"
: Este es el patrón de búsqueda. slab
busca la palabra "slab", \|
actúa como un operador OR y slub
busca la palabra "slub".
La salida mostrará cualquier línea del buffer de mensajes del kernel que contenga "slab" o "slub" (insensible a mayúsculas y minúsculas). Puedes ver mensajes relacionados con la inicialización del asignador slab durante el arranque, o posibles advertencias o errores si hay problemas.
[ 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.
Este comando es una forma poderosa de filtrar los mensajes del kernel y encontrar información relevante para solucionar problemas de subsistemas específicos del kernel.
Ahora has aprendido cómo inspeccionar las estadísticas del slab, verificar los parámetros relacionados del kernel y comprobar los registros del kernel en busca de mensajes relacionados con el slab. Estas son habilidades fundamentales para entender y diagnosticar el uso de memoria en Linux.
Haz clic en Continuar para completar este laboratorio.