Como verificar se um alocador de memória específico do kernel é usado no Linux

LinuxBeginner
Pratique Agora

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.