Linuxでメモリ使用量の不一致を確認する

Linuxでメモリ使用量の不一致を確認する

私はシステムに64MBのRAMを備えた組み込みLinuxシステム(kernel-5.10-24)を開発しています。

今私のシステムのメモリ使用量を確認しています。矛盾材料。

まず、カーネルコードとデータのメモリ使用量、

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でカーネルとユーザースペースのメモリ使用量を正確に計算する方法は何ですか?

関連情報