如何在Linux-5.10.24中查看内核内存使用情况?

如何在Linux-5.10.24中查看内核内存使用情况?

我正在开发内核为 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,发现BuffersSlab/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 的内存。请记住,这是一个近似值,可能无法考虑内核使用的每个内存字节。当内核动态分配和释放内存时,内存使用情况也会在运行时发生变化。

相关内容