/!\現在の状態:アップデート3 /!\
一部の/ proc/meminfo値は、他のいくつかの値の合計または差です。ただし、これらの2つのリンクでそれらがどのように計算されるかについてはあまり言及されていません(そこにアクセスするには、ctrl-f meminfo
を実行してください)。
さらに、私はあちこちで掘りましたが、ここに私がこれまでに見つけたものがあります:
MemFree: LowFree + HighFree
Active: Active(anon) + Active(file)
Inactive: Inactive(anon) + Inactive(file)
他のフィールドについてはあまり知りませんでしたが、私が見つけた場所では、これらのスタックオーバーフローの投稿のように結果が一致しません。
これらの2つの値は正しく計算されていますか?それとも外部の手段によるばらつきがあるのでしょうか?
また、一部の値は、当然のことながら、外部値なしでは計算できませんが、それでも興味があります。
/proc/meminfo
の値はどのように計算されますか?
それが役立つ場合は、/proc/meminfo
の例を次に示します。
MemTotal: 501400 kB
MemFree: 38072 kB
MemAvailable: 217652 kB
Buffers: 0 kB
Cached: 223508 kB
SwapCached: 11200 kB
Active: 179280 kB
Inactive: 181680 kB
Active(anon): 69032 kB
Inactive(anon): 70908 kB
Active(file): 110248 kB
Inactive(file): 110772 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal:
HighFree:
LowTotal:
LowFree:
MmapCopy:
SwapTotal: 839676 kB
SwapFree: 785552 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 128964 kB
Mapped: 21840 kB
Shmem: 2488 kB
Slab: 71940 kB
SReclaimable: 41372 kB
SUnreclaim: 30568 kB
KernelStack: 2736 kB
PageTables: 5196 kB
Quicklists:
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1090376 kB
Committed_AS: 486916 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 4904 kB
VmallocChunk: 34359721736 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages:
ShmemPmdMapped:
CmaTotal:
CmaFree:
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 36800 kB
DirectMap2M: 487424 kB
DirectMap4M:
DirectMap1G:
更新1:
/proc/meminfo
がデータを入力するために使用するコードは次のとおりです。
http://elixir.free-electrons.com/linux/v4.15/source/fs/proc/meminfo.c#L46
しかし、私はコーダーではないので、これらの列挙型(たとえば、NR_LRU_LISTS
など)およびグローバル変数(たとえば、totalram_pages
からのsi_meminfo
の場所 page_alloc.c)の場所を見つけるのに苦労しています。 #L4673 )が入力されています。
更新2:
Enums部分が解決され、NR_LRU_LISTS
は5
と等しくなります。
しかし、totalram_pages
の部分は見つけるのが難しいようです...
更新3:
非常に複雑に見えるため、コードを読み取ることができないようです。誰かがなんとかそれを実行し、/proc/meminfo
の価値がどのように計算されるかを示した場合、彼/彼女は報奨金を持つことができます。
答えが詳細であるほど、賞金は高くなります。
/proc/meminfo
の内容は meminfo_proc_show
のfs/proc/meminfo.c
のカーネル によって決定されます。
計算はすべて比較的簡単ですが、使用される情報源は必ずしもそれほど明白ではありません。たとえば、MemTotal
はtotalram
構造体のsysinfo
値です。 si_meminfo
in mm/page_alloc.c
で埋められます。