我正在开发内核为 5.10.24 的嵌入式 Linux 系统。系统中有96MB DRAM。
当系统启动时,我检查了内存使用情况并得到了以下信息。
# 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
从free -m
输出中,我知道有 25MB 可用内存。
我可以计算出用户空间的内存使用情况,但如何知道内核空间使用了多少内存?
我读了一些博客和SO,发现Buffers
和Slab
是/proc/meminfo
内核使用的内存。
加起来,还是有区别的!
那么如何找出内核空间使用的内存呢?Buffers
和是否Slab
足以/proc/meminfo
检查内核空间中的内存使用情况?
答案1
内核内存的使用不仅限于Buffers和Slab。它还包括其他组件,如内核代码、内核数据和内核堆栈。
您可以使用以下组件来计算内核内存使用情况:
Kernel code (from dmesg output): 7885 KB
rwdata (from dmesg output): 692 KB
rodata (from dmesg output): 1284 KB
init (from dmesg output): 560 KB
bss (from dmesg output): 336 KB
Slab (from /proc/meminfo): 8632 KB
KernelStack (from /proc/meminfo): 608 KB
现在,将它们相加:
7885 + 692 + 1284 + 560 + 336 + 8632 + 608 = 19997 KB
因此,内核使用了大约 19,997 KB 或大约 19.5 MB 的内存。请记住,这是一个近似值,可能无法考虑内核使用的每个内存字节。当内核动态分配和释放内存时,内存使用情况也会在运行时发生变化。