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