Estou tentando explicar a memória física disponível em uma caixa do Linux por meio de /proc/meminfo
(saída fornecida abaixo). Contabilizando a memória livre atual, o uso físico do espaço do usuário, as estruturas de dados do kernel, incluindo aquelas páginas enormes e enormes, etc, estou chegando perto de ~ 5 GB. É isso que meminfo me dá no momento:
# cat /proc/meminfo
MemTotal: 362816744 kB
MemFree: 2230348 kB
Buffers: 433636 kB
Cached: 814628 kB
SwapCached: 20688 kB
Active: 723172 kB
Inactive: 539364 kB
Active(anon): 369736 kB
Inactive(anon): 14936 kB
Active(file): 353436 kB
Inactive(file): 524428 kB
Unevictable: 2080 kB
Noswap 292435456 kB
Mlocked: 2080 kB
SwapTotal: 4190964 kB
SwapFree: 4072560 kB
Dirty: 640 kB
Writeback: 0 kB
AnonPages: 292440380 kB
Mapped: 144904 kB
Shmem: 129772 kB
Slab: 568552 kB
SReclaimable: 483816 kB
SUnreclaim: 84736 kB
KernelStack: 13776 kB
PageTables: 785532 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 156197224 kB
Committed_AS: 402420112 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 17872740 kB
VmallocChunk: 34142133244 kB
HardwareCorrupted: 0 kB
HugePages_Total: 28713
HugePages_Free: 14352
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 6144 kB
DirectMap2M: 2017280 kB
DirectMap1G: 367001600 kB
Como eu expliquei o estado atual da memória: MemFree + Buffers + Em cache + SwapCached + AnonPages + Mapeado + Slab + KernelStack + PageTables + memória vmalloced + páginas enormes
Como o VmallocUsed ativa o uso de memória de dispositivos físicos externos remapeados (usando ioremap) além da memória física, para obter o componente de memória física real, fiz o seguinte:
echo "( $(cat /proc/vmallocinfo | grep vmalloc | awk '{print $2}' | paste -s -d "+") )/ 1024" | bc
(como sugerido aqui ).
Portanto, o consumo de memória física do vmalloc é 826376 KB.
Páginas enormes = 28713 * 2048 Kb = 58804224 KB
Com tudo isso, estou chegando com ~ 5G de memória não contabilizada (comparando com MemTotal).
Se houver algo que eu não tenha explicado aqui e possa explicar a lacuna, por favor me avise.