web-dev-qa-db-ja.com

/ proc / meminfoの値がシステムRAMに正確にマップされていないように見えるのはなぜですか?

MemTotalの/ proc/meminfoの値は意味がありません。人間としては、それはインストールされたRAMにほぼ対応しているように見えますが、自動化されたユーティリティからインストールされたRAMを表示するために使用すると、不正確で一貫性がないように見えます。

1GのRAMを搭載したシステムの場合、MemTotal行の値は1048576〜1024 * 1024になると思います。しかし、代わりに、1029392が表示されます。別の4Gボックスでは、1024の倍数ではない3870172が表示され、1029392 * 4にも近くありません。 8Gボックスでは、8128204が得られますが、これも他の値とは相関関係がないようで、1024の倍数でもありません。

この情報を使用して、ステータスWebページでRAMを報告しようとしています。回避策は、最も近い1Gの倍数に「丸める」ことですが、これらの値が一貫していないように見え、私の期待と一致しない理由を理解してください。

誰かが私がここで欠けているものについて私に記入することができますか?

編集:以下の受け入れられた答えを拡大する...

参照は見つけることができます ここ

矛盾を説明するそのページから私にとっても興味深いのは、このビットです:

meminfo:

メモリの配布と使用に関する情報を提供します。これは、アーキテクチャとコンパイルオプションによって異なります。 .。

7
Eric Asberry

Documentation/filesystems/proc.txtから:

MemTotal: Total usable ram (i.e. physical ram minus a few reserved
          bits and the kernel binary code)

さあ、行きます。

補遺:

dmesg|grep Memory:を使用すると、さらに多くのことがわかります。

$ dmesg|grep Memory:
Memory: 3934184k/5177344k available (4434k kernel code, 1091560k absent, 151600k reserved, 7433k data, 920k init)

補遺II:

また、/ proc内のほとんどすべてのファイルに、少なくとも大まかなドキュメントが含まれていることを追加する価値があります。したがって、同様の質問がある場合は、最初に立ち寄るのがよいでしょう。

14
mattdm