Como verificar se uma configuração específica do *slab* do *kernel* está ativa no Linux

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma configuração específica do kernel slab está ativa no Linux. Você explorará diferentes métodos para inspecionar o gerenciamento de memória do kernel, focando especificamente no slab allocator.

O laboratório irá guiá-lo através da verificação das estatísticas do slab usando /proc/slabinfo, verificando as configurações relacionadas com sysctl vm e inspecionando os logs relevantes em dmesg. Essas etapas fornecerão as habilidades necessárias para entender e solucionar problemas de comportamento do kernel slab.

Verificar as estatísticas do slab com cat /proc/slabinfo

Nesta etapa, você aprenderá como inspecionar as estatísticas do slab allocator do kernel usando o arquivo /proc/slabinfo. O slab allocator é um mecanismo de gerenciamento de memória usado pelo kernel Linux para gerenciar eficientemente pequenos objetos. Entender o uso do slab pode ser útil para diagnosticar problemas relacionados à memória.

O sistema de arquivos /proc é um sistema de arquivos virtual que fornece informações sobre processos e outras informações do sistema. /proc/slabinfo contém especificamente detalhes sobre os slab caches do kernel.

Para visualizar o conteúdo de /proc/slabinfo, você usará o comando cat. cat é um utilitário Unix padrão que lê arquivos sequencialmente e os escreve na saída padrão.

Abra seu terminal, caso ainda não esteja aberto. Você pode fazer isso clicando no ícone Xfce Terminal no lado esquerdo da área de trabalho.

Agora, digite o seguinte comando e pressione Enter:

cat /proc/slabinfo

Você verá uma saída semelhante a esta (o conteúdo exato variará dependendo da atividade do 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
... (many more lines)

Vamos detalhar a saída:

  • name: O nome do slab cache (por exemplo, nf_conntrack, request_sock_TCP).
  • : O número de objetos atualmente em uso neste cache.
  • : O número total de objetos alocados neste cache.
  • : O tamanho de cada objeto em bytes.
  • : O número de objetos que cabem em um único slab.
  • : O número de páginas de memória usadas por um único slab.
  • tunables: Parâmetros que podem ser ajustados para este cache.
  • slabdata: Informações sobre os slabs em si.

Esta saída fornece um instantâneo de como o kernel está usando a memória para várias estruturas de dados internas. Embora a saída bruta possa ser extensa, é uma fonte fundamental de informações para a solução de problemas avançados do Linux.

Você visualizou com sucesso as estatísticas do slab allocator. Clique em Continuar para prosseguir para a próxima etapa.

Verificar as configurações do slab com sysctl vm

Nesta etapa, você explorará os parâmetros do kernel relacionados à memória virtual e ao slab allocator usando o comando sysctl. sysctl é um utilitário que permite visualizar e modificar os parâmetros do kernel em tempo de execução.

Os parâmetros do kernel são opções de configuração que afetam o comportamento do kernel Linux. Muitos desses parâmetros estão localizados no sistema de arquivos /proc/sys. sysctl fornece uma maneira conveniente de acessar e gerenciar esses parâmetros sem interagir diretamente com os arquivos em /proc/sys.

Estamos interessados em parâmetros relacionados à memória virtual, que geralmente incluem configurações que influenciam o gerenciamento de memória, incluindo aspectos do slab allocator. Esses parâmetros são tipicamente agrupados sob a subárvore vm.

Para visualizar todos os parâmetros do kernel relacionados à memória virtual, use o comando sysctl com o argumento vm:

sysctl vm

Digite o comando no seu terminal e pressione Enter. Você verá uma lista de parâmetros e seus valores atuais, semelhante 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

Procure parâmetros que possam estar relacionados ao caching ou à pressão de memória, como vm.vfs_cache_pressure ou vm.min_slab_ratio. Esses parâmetros podem influenciar como o kernel gerencia diferentes tipos de caches, incluindo slab caches.

Você também pode visualizar um parâmetro específico fornecendo seu nome completo. Por exemplo, para ver o valor de vm.vfs_cache_pressure:

sysctl vm.vfs_cache_pressure

Este comando irá gerar:

vm.vfs_cache_pressure = 100

O parâmetro vm.vfs_cache_pressure controla a tendência do kernel de recuperar memória usada para caching de diretórios e objetos inode. Um valor mais alto significa que o kernel é mais agressivo na recuperação dessa memória.

Entender esses parâmetros pode ajudá-lo a ajustar o comportamento da memória do seu sistema.

Clique em Continuar para passar para a próxima etapa.

Inspecionar os logs do slab em dmesg

Nesta etapa final, você aprenderá como verificar o buffer de mensagens do kernel em busca de mensagens relacionadas ao slab allocator usando o comando dmesg. O buffer de mensagens do kernel armazena mensagens produzidas pelo kernel durante a inicialização e o tempo de execução. Essas mensagens podem incluir informações sobre hardware, device drivers e subsistemas do kernel, como o slab allocator.

O comando dmesg é usado para imprimir ou controlar o kernel ring buffer. Este buffer contém mensagens do kernel, que geralmente são úteis para depuração e solução de problemas.

Para visualizar todo o buffer de mensagens do kernel, você pode simplesmente executar dmesg:

dmesg

No entanto, a saída pode ser muito longa. Para encontrar mensagens especificamente relacionadas ao slab allocator, você pode canalizar a saída de dmesg para o comando grep e pesquisar por palavras-chave como "slab" ou "SLUB" (SLUB é uma implementação moderna do slab allocator).

Digite o seguinte comando no seu terminal e pressione Enter:

dmesg | grep -i "slab\|slub"

Vamos detalhar este comando:

  • dmesg: Imprime o buffer de mensagens do kernel.
  • |: Este é um pipe, que envia a saída do comando à esquerda como entrada para o comando à direita.
  • grep: Um utilitário de linha de comando para pesquisar conjuntos de dados de texto simples em busca de linhas que correspondam a uma expressão regular.
  • -i: Esta opção torna a pesquisa case-insensitive, portanto, corresponderá a "slab", "SLAB", "slub", "SLUB", etc.
  • "slab\|slub": Este é o padrão de pesquisa. slab pesquisa a palavra "slab", \| atua como um operador OR, e slub pesquisa a palavra "slub".

A saída mostrará quaisquer linhas do buffer de mensagens do kernel que contenham "slab" ou "slub" (sem distinção entre maiúsculas e minúsculas). Você pode ver mensagens relacionadas à inicialização do slab allocator durante a inicialização, ou possíveis avisos ou erros, caso haja 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.

Este comando é uma maneira poderosa de filtrar mensagens do kernel e encontrar informações relevantes para solucionar problemas de subsistemas específicos do kernel.

Você agora aprendeu como inspecionar as estatísticas do slab, verificar os parâmetros relacionados do kernel e verificar os logs do kernel em busca de mensagens relacionadas ao slab. Essas são habilidades fundamentais para entender e diagnosticar o uso da memória no Linux.

Clique em Continuar para concluir este laboratório.

Resumo

Neste laboratório, você aprendeu como verificar as configurações do slab do kernel no Linux. Você começou inspecionando as estatísticas do slab allocator do kernel usando o arquivo /proc/slabinfo, que fornece detalhes sobre objetos ativos, objetos totais, tamanho do objeto e outras informações relevantes para vários slab caches. Esta etapa demonstrou como usar o comando cat para visualizar esses dados cruciais de gerenciamento de memória.

Em seguida, você verificou as configurações do slab usando o comando sysctl vm, que permite examinar e modificar os parâmetros do kernel relacionados à memória virtual, incluindo tunables específicos do slab. Por fim, você aprendeu como inspecionar os logs relacionados ao slab em dmesg, o buffer de mensagens do kernel, para identificar quaisquer erros ou avisos relacionados ao slab allocator. Essas etapas, em conjunto, fornecem uma abordagem abrangente para entender e solucionar problemas de comportamento do slab do kernel.