Introducción
En este laboratorio, exploraremos cómo comprobar si se está utilizando un asignador de memoria del kernel específico en Linux. Lo lograremos examinando las estadísticas del asignador, la configuración del kernel y los registros del sistema.
Primero, usaremos cat /proc/slabinfo para ver las estadísticas del asignador de slab del kernel, lo que nos dará información sobre la gestión de memoria. Luego, verificaremos el asignador en uso inspeccionando el archivo de configuración del kernel con zcat /proc/config.gz. Finalmente, inspeccionaremos los registros del asignador en dmesg para obtener información relevante. Estos pasos te ayudarán a entender cómo identificar y verificar el asignador de memoria del kernel en uso.
Comprobar las estadísticas del asignador con cat /proc/slabinfo
En este paso, exploraremos cómo verificar las estadísticas del asignador utilizando el comando cat /proc/slabinfo. Este comando proporciona una vista detallada del asignador de slab del kernel, que es responsable de gestionar la memoria de manera eficiente. Comprender esta información puede ser útil para depurar problemas relacionados con la memoria y optimizar el rendimiento del sistema.
Primero, ejecutemos el comando:
cat /proc/slabinfo
Este comando mostrará una lista de cachés de slab, junto con sus estadísticas asociadas. La salida puede parecer abrumadora al principio, pero la desglosaremos.
A continuación, un ejemplo de lo que podría ver:
slabinfo - version: 2.1
kmem_cache 48 72 192 19 1 1
...
kmalloc-192 48 72 192 19 1 1
...
Cada línea representa una caché de slab. Las columnas proporcionan información sobre la caché, como:
name: El nombre de la caché de slab.<active_objs>: El número de objetos activos en la caché.<num_objs>: El número total de objetos en la caché.<objsize>: El tamaño de cada objeto en bytes.<objperslab>: El número de objetos por slab.<pagesperslab>: El número de páginas por slab.<flags>: Banderas asociadas con la caché.
El kmem_cache es una caché de propósito general, mientras que kmalloc-192 es una caché para objetos de tamaño 192 bytes.
Para hacer la salida más legible, puede utilizar el comando less:
cat /proc/slabinfo | less
Esto le permite desplazarse por la salida página por página. Presione q para salir de less.
También puede utilizar grep para filtrar la salida y centrarse en cachés de slab específicas. Por ejemplo, para encontrar información sobre la caché kmalloc-192, puede utilizar el siguiente comando:
cat /proc/slabinfo | grep kmalloc-192
Esto mostrará solo las líneas que contengan "kmalloc-192".
Al examinar la salida de cat /proc/slabinfo, puede obtener información sobre cómo el kernel está gestionando la memoria e identificar posibles áreas de optimización.
Verificar el asignador en zcat /proc/config.gz
En este paso, verificaremos la configuración del asignador examinando el archivo de configuración del kernel, que generalmente está comprimido y se encuentra en /proc/config.gz. Este archivo contiene las opciones de configuración utilizadas para compilar el kernel, incluyendo aquellas relacionadas con la asignación de memoria.
Primero, usemos el comando zcat para descomprimir y ver el contenido del archivo de configuración:
zcat /proc/config.gz
El comando zcat es similar a cat, pero descomprime automáticamente los archivos comprimidos con gzip. La salida será una larga lista de opciones de configuración del kernel.
Para encontrar opciones relacionadas con el asignador, podemos usar grep para filtrar la salida. Por ejemplo, para encontrar opciones relacionadas con el asignador de slab, podemos usar el siguiente comando:
zcat /proc/config.gz | grep SLAB
Esto mostrará las líneas que contengan "SLAB". Puede ver algo como esto:
CONFIG_SLAB=y
## CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLUB=y
## CONFIG_SLOB is not set
Estas opciones indican qué asignador de slab está habilitado en el kernel. CONFIG_SLAB=y indica que el asignador de slab original está habilitado, mientras que CONFIG_SLUB=y indica que el asignador SLUB está habilitado. Solo uno de estos debe estar habilitado. CONFIG_SLOB es un asignador simplificado para sistemas embebidos.
También puede buscar otras opciones relacionadas con el asignador, como aquellas relacionadas con el asignador de páginas o el sistema buddy. Por ejemplo:
zcat /proc/config.gz | grep PAGE_ALLOC
Esto mostrará opciones relacionadas con la asignación de páginas.
Al examinar el archivo de configuración del kernel, puede verificar qué asignador se está utilizando y qué opciones están habilitadas. Esto puede ser útil para entender el comportamiento de gestión de memoria del sistema.
Inspeccionar los registros del asignador en dmesg
En este paso, inspeccionaremos el buffer de mensajes del kernel utilizando el comando dmesg para buscar registros relacionados con el asignador de memoria. El comando dmesg muestra mensajes del buffer circular del kernel, que puede contener información valiosa sobre eventos del sistema, incluyendo la asignación y desasignación de memoria.
Para ver los mensajes del kernel, simplemente escriba:
dmesg
Esto generará una gran cantidad de texto. Para filtrar la salida y centrarse en los mensajes relacionados con el asignador, podemos usar grep. Por ejemplo, para encontrar mensajes relacionados con el asignador de slab, use:
dmesg | grep slab
Puede ver una salida similar a esta:
[ 0.000000] SLUB: HWalign slab flags
[ 1.234567] kmem_cache_create: slab created at <memory_address>
Estos mensajes pueden proporcionar información sobre la creación, destrucción y otros eventos de la caché de slab.
También puede buscar mensajes relacionados con fallos de asignación de memoria:
dmesg | grep alloc
O mensajes relacionados con situaciones de falta de memoria (Out-of-Memory, OOM):
dmesg | grep OOM
Estos mensajes pueden ayudarlo a diagnosticar problemas relacionados con la memoria.
Para hacer la salida más manejable, puede usar less para desplazarse por los mensajes:
dmesg | less
Presione q para salir de less.
Al examinar la salida de dmesg, puede obtener información sobre el comportamiento del asignador de memoria e identificar posibles problemas.
Resumen
En este laboratorio, exploramos cómo verificar las estadísticas del asignador de memoria del kernel utilizando el comando cat /proc/slabinfo. Este comando proporciona una vista detallada del asignador de slab del kernel, mostrando una lista de cachés de slab y sus estadísticas asociadas, incluyendo el nombre de la caché, el número de objetos activos y totales, el tamaño de los objetos, el número de objetos por slab, el número de páginas por slab y las banderas.
También aprendimos cómo usar less para hacer la salida más legible y grep para filtrar la salida y centrarse en cachés de slab específicas, como kmalloc-192. Al examinar la salida, podemos obtener información sobre cómo el kernel está administrando la memoria.



