我正在开发一个嵌入式 Linux 系统(kernel-5.10-24),系统中有 64MB RAM。
现在我正在检查系统中的内存使用情况,我发现不匹配的数据。
首先,内核代码和数据的内存使用情况,
Memory: 53424K/65536K available (7878K kernel code, 690K rwdata, 1744K rodata, 364K init, 337K bss, 12112K reserved, 0K cma-reserved)
系统可用内存大小为53424KB
。
的输出free -k
如下,
/ # free -k
total used free shared buff/cache available
Mem: 53788 39148 13704 0 936 12960
Swap: 0 0 0
的输出cat /proc/meminfo
如下,
/ # cat /proc/meminfo
MemTotal: 53788 kB
MemFree: 13692 kB
MemAvailable: 12948 kB
Buffers: 0 kB
Cached: 900 kB
SwapCached: 0 kB
Active: 832 kB
Inactive: 240 kB
Active(anon): 4 kB
Inactive(anon): 172 kB
Active(file): 828 kB
Inactive(file): 68 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 192 kB
Mapped: 848 kB
Shmem: 0 kB
KReclaimable: 372 kB
Slab: 6320 kB
SReclaimable: 372 kB
SUnreclaim: 5948 kB
KernelStack: 360 kB
PageTables: 40 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 26892 kB
Committed_AS: 532 kB
VmallocTotal: 1048372 kB
VmallocUsed: 2240 kB
VmallocChunk: 0 kB
Percpu: 200 kB
内核内存使用量是“Buffers+Slab+KernelStack+PageTables”= 的总和7620K
。
运行时$(ps -o pid,comm,rss,vsz | awk '{print $3}' | grep -v RSS)
,各进程的RSS总和约为4120K
。
所以系统启动后,内核空间和用户空间的内存使用量之和为7620 + 4120 = 11740K
。
但free -k
显示used
内存约为39148K
,这是一个很大的不匹配。
为什么会存在很大的不匹配,以及如何精确计算 Linux 中内核和用户空间的内存使用情况?