私は、会社開発部門に複数の64ビットRedHat VM(VMware vSphere)を設定しています。ほとんどは4096MBのRAMで始まりますが、Linuxは3832MBしか認識していないようです。なぜこんなのか教えてくれる人はいますか?
答え1
LinuxがRAMブロックを使用しない理由はいくつかあります。
- Linuxがハードウェア周辺機器に属していることを検出した場合。ほとんどのコンピュータはディスプレイにRAMを必要とするため、一部のRAMはグラフィックカード用に予約する必要があります。グラフィックカードには独自のRAMを含めることもできます。グラフィックスカードは、メモリ要件が比較的高いため、独自のRAMにバンドルされていない傾向があります(例外もあります)。
少なくともVMwareとVirtualBoxは、ビデオメモリを仮想マシンに割り当てられたメモリの一部として計算します。ビデオメモリサイズはVM構成の設定です。 - Linuxが使用するメモリアドレスの範囲は、カーネルコマンドラインのadパラメータによって
mem=…
制限できます。memmap=…
- 時にはカーネルがいくつかのメモリを使用できないことがあります。 RAMインターフェイスは非常に標準的なので、LPAEではなく32ビットカーネルを実行し、4 GB以上のRAMがないと、この現象はほとんど発生しません。
- ECCメモリの場合、エラーが検出された一部の範囲は利用できないとマークされることがあります。
実際、ほとんどの場合、Linuxで利用可能なメモリは、利用可能なRAMからビデオメモリ(および他のハードウェア周辺機器で使用されるメモリ)を差し引いたものです。 Linux自体は、メモリをカーネルで使用されるメモリとプロセスで使用可能なメモリの2つの部分に分けます。ほとんどのツール(たとえば、free
プロセスで使用可能な合計メモリ量を合計として報告)
したがって、free
合計容量が3,832 MBで、対応する(物理または仮想)マシンに4,096 MBのRAMがある場合、これは次のことを意味します。
4096MB - 3832MB = video memory (+ other hardware memory) + kernel memory
ハードウェアとコア264MBは合理的に見えます。残りはハードウェアとカーネルで使用されるため、アプリケーションに使用できるスペースは3832MBです。
答え2
vSphereクライアントの仮想マシンで、[設定の編集]をクリックします。ハードウェアタブでビデオカードを選択します。右側にビデオメモリが表示されます。私のデフォルトは8MBです。