Estou trabalhando em um sistema Linux embarcado com kernel 5.10.24. E há 96 MB DRAM no sistema.
Quando o sistema inicializa, verifiquei o uso de memória e obtive o seguinte.
# dmesg | grep "kernel code"
[ 0.000000] Memory: 85888K/131072K available (7885K kernel code, 692K rwdata, 1284K rodata, 560K init, 336K bss, 45184K reserved, 0K cma-reserved)
# free -m
total used free shared buff/cache available
Mem: 84 56 1 0 26 25
Swap: 0 0 0
#
#
# cat /proc/meminfo
MemTotal: 86448 kB
MemFree: 1992 kB
MemAvailable: 25948 kB
Buffers: 0 kB
Cached: 26896 kB
SwapCached: 0 kB
Active: 9632 kB
Inactive: 39064 kB
Active(anon): 72 kB
Inactive(anon): 21796 kB
Active(file): 9560 kB
Inactive(file): 17268 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 21852 kB
Mapped: 7664 kB
Shmem: 68 kB
KReclaimable: 696 kB
Slab: 8632 kB
SReclaimable: 696 kB
SUnreclaim: 7936 kB
KernelStack: 608 kB
PageTables: 400 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 43224 kB
Committed_AS: 146992 kB
VmallocTotal: 1048372 kB
VmallocUsed: 4156 kB
VmallocChunk: 0 kB
Percpu: 200 kB
Pela free -m
saída, sei que há 25 MB de memória disponível.
Posso descobrir o uso de memória para o espaço do usuário, mas como saber quanta memória é usada no espaço do kernel?
Eu li alguns blogs e SO, e descobri que Buffers
a Slab
memória /proc/meminfo
é usada pelo kernel.
Somando-os, ainda há diferença!
Então, como descobrir a memória usada pelo espaço do kernel? São Buffers
e Slab
são /proc/meminfo
suficientes para verificar o uso de memória no espaço do kernel?
O uso de memória do kernel não se limita apenas a Buffers e Slab. Ele também inclui outros componentes, como código do kernel, dados do kernel e pilha do kernel.
Você pode calcular o uso de memória do kernel com os seguintes componentes:
Agora, some-os:
Portanto, o kernel está usando aproximadamente 19.997 KB ou cerca de 19,5 MB de memória. Lembre-se de que isso é uma aproximação e pode não representar cada byte de memória usado pelo kernel. O uso de memória também pode mudar durante o tempo de execução, pois o kernel aloca e desaloca memória dinamicamente.