Introdução
Neste laboratório, exploraremos como verificar se um alocador de memória específico do kernel está sendo usado no Linux. Conseguiremos isso examinando as estatísticas do alocador, a configuração do kernel e os logs do sistema.
Primeiramente, usaremos cat /proc/slabinfo para visualizar as estatísticas do alocador de slab do kernel, fornecendo informações sobre o gerenciamento de memória. Em seguida, verificaremos o alocador em uso inspecionando o arquivo de configuração do kernel usando zcat /proc/config.gz. Finalmente, inspecionaremos os logs do alocador em dmesg para obter informações relevantes. Essas etapas ajudarão você a entender como identificar e verificar o alocador de memória do kernel em uso.
Verificar as estatísticas do alocador com cat /proc/slabinfo
Nesta etapa, exploraremos como verificar as estatísticas do alocador usando o comando cat /proc/slabinfo. Este comando fornece uma visão detalhada do alocador de slab do kernel, que é responsável por gerenciar a memória de forma eficiente. Compreender essas informações pode ser útil para depurar problemas relacionados à memória e otimizar o desempenho do sistema.
Primeiro, vamos executar o comando:
cat /proc/slabinfo
Este comando exibirá uma lista de slab caches, juntamente com suas estatísticas associadas. A saída pode parecer avassaladora no início, mas vamos detalhá-la.
Aqui está um exemplo do que você pode ver:
slabinfo - version: 2.1
kmem_cache 48 72 192 19 1 1
...
kmalloc-192 48 72 192 19 1 1
...
Cada linha representa um slab cache. As colunas fornecem informações sobre o cache, como:
name: O nome do slab cache.<active_objs>: O número de objetos ativos no cache.<num_objs>: O número total de objetos no cache.<objsize>: O tamanho de cada objeto em bytes.<objperslab>: O número de objetos por slab.<pagesperslab>: O número de páginas por slab.<flags>: Flags associadas ao cache.
O kmem_cache é um cache de uso geral, enquanto kmalloc-192 é um cache para objetos de tamanho 192 bytes.
Para tornar a saída mais legível, você pode usar o comando less:
cat /proc/slabinfo | less
Isso permite que você role pela saída página por página. Pressione q para sair do less.
Você também pode usar grep para filtrar a saída e se concentrar em slab caches específicos. Por exemplo, para encontrar informações sobre o cache kmalloc-192, você pode usar o seguinte comando:
cat /proc/slabinfo | grep kmalloc-192
Isso exibirá apenas as linhas que contêm "kmalloc-192".
Ao examinar a saída de cat /proc/slabinfo, você pode obter informações sobre como o kernel está gerenciando a memória e identificar áreas potenciais para otimização.
Verificar o alocador em zcat /proc/config.gz
Nesta etapa, verificaremos a configuração do alocador examinando o arquivo de configuração do kernel, que geralmente é compactado e localizado em /proc/config.gz. Este arquivo contém as opções de configuração usadas para construir o kernel, incluindo aquelas relacionadas à alocação de memória.
Primeiro, vamos usar o comando zcat para descompactar e visualizar o conteúdo do arquivo de configuração:
zcat /proc/config.gz
O comando zcat é semelhante ao cat, mas ele descompacta automaticamente arquivos gzipped. A saída será uma longa lista de opções de configuração do kernel.
Para encontrar opções relacionadas ao alocador, podemos usar grep para filtrar a saída. Por exemplo, para encontrar opções relacionadas ao alocador de slab, podemos usar o seguinte comando:
zcat /proc/config.gz | grep SLAB
Isso exibirá linhas que contêm "SLAB". Você pode ver algo assim:
CONFIG_SLAB=y
## CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLUB=y
## CONFIG_SLOB is not set
Essas opções indicam qual alocador de slab está habilitado no kernel. CONFIG_SLAB=y indica que o alocador de slab original está habilitado, enquanto CONFIG_SLUB=y indica que o alocador SLUB está habilitado. Apenas um deles deve estar habilitado. CONFIG_SLOB é um alocador simplificado para sistemas embarcados.
Você também pode pesquisar outras opções relacionadas ao alocador, como aquelas relacionadas ao alocador de páginas ou ao sistema buddy. Por exemplo:
zcat /proc/config.gz | grep PAGE_ALLOC
Isso mostrará opções relacionadas à alocação de páginas.
Ao examinar o arquivo de configuração do kernel, você pode verificar qual alocador está sendo usado e quais opções estão habilitadas. Isso pode ser útil para entender o comportamento de gerenciamento de memória do sistema.
Inspecionar os logs do alocador em dmesg
Nesta etapa, inspecionaremos o buffer de mensagens do kernel usando o comando dmesg para procurar logs relacionados ao alocador de memória. O comando dmesg exibe mensagens do buffer de anel do kernel, que pode conter informações valiosas sobre eventos do sistema, incluindo alocação e desalocação de memória.
Para visualizar as mensagens do kernel, basta digitar:
dmesg
Isso produzirá uma grande quantidade de texto. Para filtrar a saída e focar nas mensagens relacionadas ao alocador, podemos usar grep. Por exemplo, para encontrar mensagens relacionadas ao alocador de slab, use:
dmesg | grep slab
Você pode ver uma saída semelhante a esta:
[ 0.000000] SLUB: HWalign slab flags
[ 1.234567] kmem_cache_create: slab created at <memory_address>
Essas mensagens podem fornecer informações sobre a criação, destruição e outros eventos do slab cache.
Você também pode pesquisar mensagens relacionadas a falhas na alocação de memória:
dmesg | grep alloc
Ou mensagens relacionadas a situações de falta de memória (OOM):
dmesg | grep OOM
Essas mensagens podem ajudá-lo a diagnosticar problemas relacionados à memória.
Para tornar a saída mais gerenciável, você pode usar less para rolar pelas mensagens:
dmesg | less
Pressione q para sair do less.
Ao examinar a saída de dmesg, você pode obter informações sobre o comportamento do alocador de memória e identificar possíveis problemas.
Resumo
Neste laboratório, exploramos como verificar as estatísticas do alocador de memória do kernel usando o comando cat /proc/slabinfo. Este comando fornece uma visão detalhada do alocador de slab do kernel, exibindo uma lista de slab caches e suas estatísticas associadas, incluindo o nome do cache, o número de objetos ativos e totais, o tamanho do objeto, objetos por slab, páginas por slab e flags.
Também aprendemos como usar less para tornar a saída mais legível e grep para filtrar a saída e focar em slab caches específicos, como kmalloc-192. Ao examinar a saída, podemos obter informações sobre como o kernel está gerenciando a memória.



