私は、制限がメモリの量である(つまり、プロセスが並列化できない)いくつかのバイオインフォマティクスの作業を行っています。 Opteron 6100CPU用の2つのソケットと128GBのRAM 16 x 8GBDIMMで可能)を備えたDellR715のようなサーバーがあります。
各CPUには、DIMMのバンクが関連付けられています。
私の質問は、Linuxをそのようなマシンに置いた場合、RAM各CPUでアドレス指定可能ですか?つまり、Linuxでシングルスレッドプログラムを実行すると、そのプロセスは処理されますか? 128GBのRAMまたは64GBのRAMのみにアクセスできますか?
厳密に言えば、そのシングルスレッドプロセスは、サーバーで使用可能なすべてのメモリにアクセスできます。あなたはそれについて心配する必要はありません。
プロセスはRAM内のallメモリにアクセスできますが、その半分へのアクセスは(理論的には)残りの半分へのアクセスよりも遅くなります。 VMWare-ESXは、パフォーマンスを良好に保つために、プロセスの実行と同じメモリノードに特定のVM)のすべてのメモリを保持しようとするため、メモリの局所性を認識しています。
このテクノロジは、Non-Uniform Memory Access(NUMA)と呼ばれます。 Linuxマシンにはすでにそのビットが含まれている可能性があります(numastat
はデータを返す必要があります)。 numactl
プログラムは、プロセスにメモリポリシーを割り当てます。これは、独自のコードを記述していて、メモリ速度を最適化したい場合に非常に役立ちます。 CPUローカルメモリは、別のCPUのメモリノードのメモリよりも高速にフェッチします。これは、使用している内容によっては便利な場合があります。
Linuxは、64ビットシステムで2 ^ 64-1の仮想アドレス空間を提供するデマンドページングシステムです。 VMMは、ボックス内のすべてのRAMにアクセスできます。 Linuxカーネルは、プロセスではなくページテーブルの作成を処理します。