Quanta RAM o kernel usa?

46

Essa pergunta é motivada pelo meu choque quando descobri que o kernel do Mac OS X usa 750 MB de RAM .

Uso o Linux há 20 anos e sempre "sabia" que o uso da RAM do kernel é diminuído pelo X (é verdade? Alguma vez foi verdade?).

Então, depois de pesquisar um pouco, tentei o slabtopque me dizia:

Active / Total Size (% used)       : 68112.73K / 72009.73K (94.6%)

Isso significa que meu kernel está usando ~ 72MB de RAM agora?

(Considerando que o RSS dos toprelatórios Xorgé de 17 milhões, o kernel agora supera o X, e não o contrário).

Qual é o uso "normal" de RAM do kernel (faixa) de um laptop?

Por que o MacOS usa uma ordem de magnitude mais RAM que o Linux?

PS. Nenhuma resposta aqui abordou a última pergunta; portanto, consulte as perguntas relacionadas:

sds
fonte
Na minha máquina, ele relata quase 2 GB ... mas quando você olha os detalhes, tudo está relacionado ao cache do sistema de arquivos.
Derobert # 23/13
2
De fato, se eu fizer um echo 3 > /proc/sys/vm/drop_caches, só tenho 80 MB usados.
Derobert # 23/13
De acordo com os comentários no link que você fornece, a memória usada pelo hardware gráfico integrado está incluída na contabilidade kernel_task.
22613 Russell Borogove

Respostas:

38

Kernel é um pouco impróprio. O kernel do Linux é composto por vários processos / threads + os módulos ( lsmod), para obter uma imagem completa, você precisa olhar a bola toda e não apenas um componente.

Aliás, meus shows slabtop:

 Active / Total Size (% used)       : 173428.30K / 204497.61K (84.8%)

A página do manual slabtoptambém tinha o seguinte a dizer:

O cabeçalho estatístico do slabtop está rastreando quantos bytes de lajes estão sendo usados ​​e não uma medida de memória física. O campo 'Laje' no arquivo / proc / meminfo está rastreando informações sobre a memória física de laje usada.

Eliminando caches

Descartar meus caches como @derobert sugerido nos comentários da sua pergunta faz o seguinte:

$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$

 Active / Total Size (% used)       : 61858.78K / 90524.77K (68.3%)

O envio de um 3 faz o seguinte: pagecache gratuito, dentries e inodes. Discuto isso mais nesta seção de perguntas e respostas da U&L intitulada: Existem maneiras ou ferramentas para despejar o cache e o buffer de memória? ". Portanto, 110 MB do meu espaço estavam sendo usados ​​apenas mantendo as informações sobre pagecache, dentries e inodes.

informação adicional

Então, quanta RAM meu Kernel está usando?

Essa foto é um pouco mais nebulosa para mim, mas aqui estão as coisas que eu "acho" que sabemos.

Laje

Podemos obter um instantâneo do uso do Slab usando esta técnica. Basicamente, podemos extrair essas informações /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Módulos

Também podemos obter um valor de tamanho para os módulos do Kernel (não está claro se é o tamanho deles no disco ou na RAM) puxando esses valores de /proc/modules:

$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758

Slabinfo

Muitos dos detalhes sobre o SLAB estão acessíveis nesta estrutura de proc /proc/slabinfo:

$ less /proc/slabinfo | head -5
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_ffff8801f2b30000      0      0    320   25    2 : tunables    0    0    0 : slabdata      0      0      0
fuse_request         100    125    632   25    4 : tunables    0    0    0 : slabdata      5      5      0
fuse_inode            21     21    768   21    4 : tunables    0    0    0 : slabdata      1      1      0

Dmesg

Quando o sistema é inicializado, há uma linha que relata o uso de memória do kernel Linux logo após o carregamento.

$ dmesg |grep Memory:
[    0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)

Referências

slm
fonte
1
Existe alguma maneira de obter a imagem completa?
Gilles
@Gilles - de quantas memórias em uso, certo? Eu me lembro de um Q sobre isso antes, você?
slm
@Gilles - Acho que isso é perto do que você está perguntando sobre: grep Slab /proc/meminfo.
slm
@ Gilles - existe também o seguinte:, /proc/slabinfoque parece ser a fonte slabtop, para que se possa calcular os valores daqui para uma contagem total mais precisa.
slm
1
/proc/modulesé provável que a coluna 2 de seja carregada com o tamanho do módulo na memória, pois os módulos em disco são normalmente compactados (por exemplo, no Fedora 27 é xz), verifiquei o tg3driver da NIC, o tamanho do disco (tamanho do arquivo compactado ou original) não corresponde ao tamanho do byte exibido em /proc/modules.
Terry Wang
7

Que tal agora:

Active / Total Size (% used)       : 4709.24K / 5062.03K

Isso ocorre em uma máquina muito pequena, recém-inicializada, rodando sem cabeça com um kernel normal. Portanto, não requer muito.

Como dicas derobert, o kernel utilizará a memória disponível para armazenamento em cache e isso é muito do que você vê slabtop. Além do cache do arquivo, isso tem a ver com a memória compartilhável dos processos do espaço do usuário que não está mais em uso. O kernel o deixa lá até que o mesmo material seja necessário novamente, ou então algo precisa ativamente de RAM, caso em que é esquecido. Uma analogia seria retirar um livro de uma prateleira e deixá-lo aberto para leitura em uma mesa: quando terminar de ler, você poderá deixar o livro aberto sobre a mesa, caso precise examiná-lo novamente.

Cachinhos Dourados
fonte
4

Neste servidor de 512 GB de RAM executando o Solaris, o kernel usa 25 GB:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    3210102             25078    5%
Anon                     15266226            119267   23%
Exec and libs               41457               323    0%
Page cache                3539331             27651    5%
Free (cachelist)         13799571            107809   21%
Free (freelist)          30093164            235102   46%

Total                    65949851            515233
Physical                 65927406            515057

O menor tem mais da metade de sua RAM usada pelo kernel:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    2149699             16794   52%
Anon                       517016              4039   13%
Exec and libs               15420               120    0%
Page cache                  21840               170    1%
Free (cachelist)             8768                68    0%
Free (freelist)           1404862             10975   34%

Total                     4117605             32168
Physical                  4096002             32000

Nada para se preocupar, a RAM não utilizada é uma RAM desperdiçada de qualquer maneira.

jlliagre
fonte
1
Por favor, descreva como você conseguiu sua saída.
Maus
@ Executando echo ::memstat | mdb -kem alguns servidores de produção Solaris 10 anteriores à atualização 10/09.
Jlliagre