Cómo comprobar si una configuración específica del slab del kernel está activa en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo verificar si una configuración específica del slab del kernel está activa en Linux. Explorarás diferentes métodos para inspeccionar la gestión de memoria del kernel, centrándote específicamente en el asignador slab.

El laboratorio te guiará a través de la comprobación de las estadísticas del slab utilizando /proc/slabinfo, la verificación de configuraciones relacionadas con sysctl vm y la inspección de registros relevantes en dmesg. Estos pasos te proporcionarán las habilidades necesarias para entender y solucionar problemas de comportamiento del slab del kernel.


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{{"Cómo comprobar si una configuración específica del slab del kernel está activa en Linux"}} linux/cat -.-> lab-558759{{"Cómo comprobar si una configuración específica del slab del kernel está activa en Linux"}} linux/grep -.-> lab-558759{{"Cómo comprobar si una configuración específica del slab del kernel está activa en Linux"}} linux/env -.-> lab-558759{{"Cómo comprobar si una configuración específica del slab del kernel está activa en Linux"}} end

Verificar las estadísticas del slab con cat /proc/slabinfo

En este paso, aprenderás cómo inspeccionar las estadísticas del asignador slab del kernel utilizando el archivo /proc/slabinfo. El asignador slab es un mecanismo de gestión de memoria utilizado por el kernel de Linux para administrar de manera eficiente objetos pequeños. Comprender el uso del slab puede ser útil para diagnosticar problemas relacionados con la memoria.

El sistema de archivos /proc es un sistema de archivos virtual que proporciona información sobre procesos y otra información del sistema. /proc/slabinfo contiene específicamente detalles sobre las cachés slab del kernel.

Para ver el contenido de /proc/slabinfo, utilizarás el comando cat. cat es una utilidad estándar de Unix que lee archivos secuencialmente y los escribe en la salida estándar.

Abre tu terminal si no está abierta. Puedes hacer esto haciendo clic en el icono de Xfce Terminal en el lado izquierdo del escritorio.

Ahora, escribe el siguiente comando y presiona Enter:

cat /proc/slabinfo

Verás una salida similar a esta (el contenido exacto variará según la actividad del sistema):

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
... (muchas más líneas)

Desglosemos la salida:

  • name: El nombre de la caché slab (por ejemplo, nf_conntrack, request_sock_TCP).
  • <active_objs>: El número de objetos actualmente en uso en esta caché.
  • <num_objs>: El número total de objetos asignados en esta caché.
  • : El tamaño de cada objeto en bytes.
  • : El número de objetos que caben en un solo slab.
  • : El número de páginas de memoria utilizadas por un solo slab.
  • tunables: Parámetros que se pueden ajustar para esta caché.
  • slabdata: Información sobre los propios slabs.

Esta salida proporciona una instantánea de cómo el kernel está utilizando la memoria para diversas estructuras de datos internas. Si bien la salida sin procesar puede ser extensa, es una fuente fundamental de información para la resolución de problemas avanzados de Linux.

Has visto con éxito las estadísticas del asignador slab. Haz clic en Continuar para pasar al siguiente paso.

Verificar la configuración del slab con sysctl vm

En este paso, explorarás los parámetros del kernel relacionados con la memoria virtual y el asignador slab utilizando el comando sysctl. sysctl es una utilidad que te permite ver y modificar los parámetros del kernel en tiempo de ejecución.

Los parámetros del kernel son opciones de configuración que afectan el comportamiento del kernel de Linux. Muchos de estos parámetros se encuentran en el sistema de archivos /proc/sys. sysctl proporciona una forma conveniente de acceder y gestionar estos parámetros sin interactuar directamente con los archivos en /proc/sys.

Estamos interesados en los parámetros relacionados con la memoria virtual, que a menudo incluyen configuraciones que influyen en la gestión de memoria, incluyendo aspectos del asignador slab. Estos parámetros suelen agruparse bajo el subárbol vm.

Para ver todos los parámetros del kernel relacionados con la memoria virtual, utiliza el comando sysctl con el argumento vm:

sysctl vm

Escribe el comando en tu terminal y presiona Enter. Verás una lista de parámetros y sus valores actuales, similar a esta:

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

Busca parámetros que puedan estar relacionados con el caché o la presión de memoria, como vm.vfs_cache_pressure o vm.min_slab_ratio. Estos parámetros pueden influir en cómo el kernel gestiona diferentes tipos de cachés, incluyendo las cachés slab.

También puedes ver un parámetro específico proporcionando su nombre completo. Por ejemplo, para ver el valor de vm.vfs_cache_pressure:

sysctl vm.vfs_cache_pressure

Este comando mostrará la siguiente salida:

vm.vfs_cache_pressure = 100

El parámetro vm.vfs_cache_pressure controla la tendencia del kernel a recuperar la memoria utilizada para el caché de objetos de directorio e inodo. Un valor más alto significa que el kernel es más agresivo en la recuperación de esta memoria.

Comprender estos parámetros puede ayudarte a ajustar el comportamiento de la memoria de tu sistema.

Haz clic en Continuar para pasar al siguiente paso.

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.

Resumen

En este laboratorio, aprendiste cómo verificar la configuración del slab del kernel en Linux. Comenzaste inspeccionando las estadísticas del asignador slab del kernel utilizando el archivo /proc/slabinfo, que proporciona detalles sobre objetos activos, objetos totales, tamaño de objetos y otra información relevante para varios cachés slab. Este paso demostró cómo usar el comando cat para ver estos datos cruciales de gestión de memoria.

A continuación, verificaste la configuración del slab utilizando el comando sysctl vm, que te permite examinar y modificar los parámetros del kernel relacionados con la memoria virtual, incluyendo ajustes específicos del slab. Finalmente, aprendiste cómo inspeccionar los registros relacionados con el slab en dmesg, el buffer de mensajes del kernel, para identificar cualquier error o advertencia relacionada con el asignador slab. Estos pasos en conjunto proporcionan un enfoque integral para entender y solucionar problemas del comportamiento del slab del kernel.