O que é “memória dinâmica do kernel” conforme relatado pelo smem?

7

Ao diagnosticar problemas de pouca memória na minha máquina desktop (detalhes na U & L ), notei que my noncache "memória dinâmica do kernel" é grande :

# smem -twk
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory          1.1G     369.3M     801.7M 
userspace memory               2.0G     133.3M       1.9G 
free memory                  734.1M     734.1M          0 
----------------------------------------------------------
                               3.9G       1.2G       2.7G

Em dois outros sistemas que eu verifiquei era 150MiB (também um desktop, mas com 8GiB ou RAM) e 29MiB. Em nenhum lugar perto dos 20% da minha máquina de mesa.

Como posso descobrir o que a torna tão grande?

BTW: Eu já verifiquei smem fontes, basicamente (memtotal - userspace - free - cache).

/proc/meminfo :

# cat /proc/meminfo 
MemTotal:        4051956 kB
MemFree:          508276 kB
Buffers:           35232 kB
Cached:           651052 kB
SwapCached:       121380 kB
Active:          1358008 kB
Inactive:        1351596 kB
Active(anon):    1184616 kB
Inactive(anon):   886904 kB
Active(file):     173392 kB
Inactive(file):   464692 kB
Unevictable:        8616 kB
Mlocked:            8616 kB
SwapTotal:       4051952 kB
SwapFree:        3815780 kB
Dirty:               348 kB
Writeback:             0 kB
AnonPages:       1971164 kB
Mapped:           140108 kB
Shmem:             44656 kB
Slab:             176564 kB
SReclaimable:      62080 kB
SUnreclaim:       114484 kB
KernelStack:        3352 kB
PageTables:        43012 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6077928 kB
Committed_AS:    3681164 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      139780 kB
VmallocChunk:   34359570976 kB
HardwareCorrupted:     0 kB
AnonHugePages:    448512 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:     2536128 kB
DirectMap2M:     1656832 kB
    
por Hubert Kario 21.01.2013 / 21:00

2 respostas

2

Vendo outro post seu, acho que você está usando o zram. Então essa será minha suposição aqui.

Eu fiz a experiência para instalar o zram e consumir muita memória, e obtive a mesma saída de smem do que você. smem não leva em conta zram em sua contagem , usa somente /proc/meminfo para calcular seu valor e, se você procurar e tentar entender o código, verá que o zram RAM ocupa é, no final, contada na coluna noncache da linha kernel dynamic memory .

Investigações adicionais

Seguindo meu pressentimento de que o zram estava por trás desse comportamento, configurei uma VM com especificações semelhantes à sua máquina: 4 GB de RAM e 2 GB de zram swap, sem arquivo de troca.

Carreguei a VM com aplicativos pesados e recebi o seguinte estado:

huygens@ubuntu:~$ smem -wt -K ~/vmlinuz-3.2.0-38-generic.unpacked -R 4096M
Area                           Used      Cache   Noncache 
firmware/hardware            130717          0     130717 
kernel image                  13951          0      13951 
kernel dynamic memory       1063520     922172     141348 
userspace memory            2534684     257136    2277548 
free memory                  451432     451432          0 
----------------------------------------------------------
                            4194304    1630740    2563564 
huygens@ubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3954       3528        426          0         79        858
-/+ buffers/cache:       2589       1365
Swap:         1977          0       1977

Como você pode ver, free relata 858 MB de memória cache e é também o que smem parece reportar dentro da memória dinâmica do kernel em cache.

Depois destaquei ainda mais o sistema usando o Chromium Browser. No começo, era apenas 83 MB de swap usado. Mas depois de mais algumas abas abertas, o interruptor de troca rapidamente para quase o máximo e eu experimentei OOM! O zram tem um lado realmente perigoso, quando configurado erroneamente (tamanhos muito grandes), pode rapidamente atingir você como um mecanismo semelhante a um trebuchet.

Naquela época, eu tinha as seguintes saídas:

huygens@ubuntu:~$ smem -wt -K ~/vmlinuz-3.2.0-38-generic.unpacked -R 4096M
Area                           Used      Cache   Noncache 
firmware/hardware            130717          0     130717 
kernel image                  13951          0      13951 
kernel dynamic memory       1355344     124072    1231272 
userspace memory             961004      36456     924548 
free memory                 1733288    1733288          0 
----------------------------------------------------------
                            4194304    1893816    2300488 
huygens@ubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3954       2256       1698          0          4        132
-/+ buffers/cache:       2118       1835
Swap:         1977       1750        227

Veja como a memória dinâmica do kernel (cache de colunas e não cache) se parece com o invertido? É porque, no primeiro caso, o kernel tinha memória "cache", como relatado por free , mas tinha memória swap mantida por zram , que smem não sabe como calcular (verifique o código-fonte smem, zram ocupação não é relatada em / proc / meminfo, isso não é computado por smem que faz simples "mem kernel total" - "tipo de memória reportada por meminfo que eu sei que são cache", o que não sabe é que em o mem total do kernel calculado adicionou o tamanho da troca que está na RAM!)

Quando eu estava nesse estado, ativei uma troca de disco rígido e desliguei o zram swap e reinicializei os dispositivos zram: echo 1 > /sys/block/zram0/reset .

Depois disso, a memória do kernel noncache derreteu como a neve no verão e retornou ao valor "normal".

Conclusão

smem não sabe sobre zram (ainda) talvez porque ainda é temporário e, portanto, não faz parte de /proc/meminfo que relata parâmetros globais (como tamanho de páginas ativas, memória total) e depois reportar apenas alguns parâmetros específicos. smem identificou alguns desses parâmetros específicos como "cache", some-os e compare isso com a memória total. Por causa disso, zram de memória usada é contada na coluna noncache .

Nota: a propósito, no kernel moderno, meminfo relata também a memória compartilhada consumida. smem ainda não leva isso em conta, então, mesmo sem zram , a saída de smem deve considerar cuidadosamente esp. se você usa um aplicativo que faz grande uso da memória compartilhada.

Referências utilizadas:

por 02.03.2013 / 00:01
1

Não parece ruim para mim, muita memória facilmente recuperável ao redor. Exatamente o que não está funcionando (não apenas "Oh, horror, olhe os números < programa aleatório > dá!")? Queda de programas (OOM, falta de memória, manipulador de chute)? Programas não iniciam? O sistema parece lento? Atividade de disco incessante? Alguma pista nos logs?

Linux irá encher toda a memória disponível, é mais barato apenas manter as coisas do que apagá-las ativamente, e elas podem ser usadas novamente mais tarde. Uma máquina quiescente (ou logo após a inicialização) dará números muito diferentes do que um usado ativamente.

    
por 29.01.2013 / 17:08