私はSupermicro X10DAiマザーボードを持っています。マニュアルは次のとおりです。ここ。 1-11ページでは、各CPUに独自のRAMがあることがわかります。
program A
APIがローカルソケットを介して提供されているとします/var/run/socketapi
。プログラムはCPU 1から始まります。
program B
次にソケットに接続し、CPU 2で起動します。
program B
ソケットにコマンドを書き込むと、カーネルは通常メモリ空間からprogram B
メモリ空間にデータをコピーしますprogram A
。
しかし、プログラムが異なるCPUで実行され、メモリがCPU間で共有されないため、問題があります。
最近のLinuxでは、この問題はどのように解決されますか?おそらく、マニュアルに示されているQPIインタフェースを使用して、CPU 1のメモリ全体がCPU 2のメモリにマップされていますか?
それとも、IPCプログラムが実行されず、エラーが発生することもありますか?
Linuxのソースコードやドキュメントへの参照を提供してください。
答え1
はい、CPUはCPU相互接続を介して互いにメモリをマッピングします。
Intel互換アーキテクチャでは、次のようになります。一貫性のあるマッピングするので、ソフトウェアは主に他のCPUに接続されているメモリにアクセスするときに待ち時間が長くなるという形に気づきます。
システムメモリ自体のレイテンシがかなりあるため、その違いは大きくありません。オペレーティングシステムは依然として動的に最適化されており、IPCトラフィックの多い2つのプロセスを同じノードに移動することを決定できます。
異なるアーキテクチャには接続されていないマッピングがある可能性があります。これを行うには、ソフトウェアがメモリの場所についてより明確にする必要がありますが、ソケットが多いほど拡張する必要があります。