6

呼び出しを使用して、プロセスを特定のCPUコアのセットに固定することができsched_setaffinity()ます。マニュアルページには次のように書かれています。

   Restricting a process to run on a single CPU also avoids the
   performance cost caused by the cache invalidation that occurs when a process
   ceases to execute on one CPU and then recommences execution on a different
   CPU.

これはほとんど明白なことです(またはそうではありませんか?)。私にはそれほど明白ではないのはこれです-

LWPを特定のCPUまたはSMPノードに固定すると、キャッシュコヒーレンシバストラフィックが減少しますか?たとえば、プロセスは固定されて実行されているため、他のCPUはそのプライベートメモリを変更しないでください。したがって、同じSMPノードの一部であるCPUのみがキャッシュコヒーレントを維持する必要があります。

4

2 に答える 2

10

説明するピン留めされたプロセスの場合、CPUソケット間のコヒーレンシトラフィックがあってはなりません。最新のXeonプラットフォームは、チップセットにスヌープフィルタリングを実装しています。スヌープフィルターは、リモートソケットが問題のキャッシュラインを持つことができない場合を示します。これにより、キャッシュ無効化メッセージをそのソケットに送信する必要がなくなります。

これは自分で測定できます。Xeonプロセッサは、さまざまなキャッシュ統計カウンタを実装しています。rdpmc命令を使用して独自のコードでカウンターを読み取るか、VTuneなどの製品を使用することができます。参考までに、rdpmcの使用は非常に正確ですが、ユーザーモードでこの命令を使用できるようにするには、最初にCR4でビットを設定する必要があるため、少し注意が必要です。

- 編集 -

上記の私の答えは、QPIリンクを使用する55xxシリーズのCPUでは時代遅れです。これらのリンクは、http: //ark.intel.com/products/37111/Intel-Xeon-Processor-X5570-%288M-Cache-2_93-GHz-6_40-GTs-Intelのように、チップセットを介さずにCPUソケットを直接相互接続します。 -QPI%29

ただし、各CPUのL3キャッシュは包括的であるため、QPIリンクを介したスヌープは、ローカルL3キャッシュが回線がローカルソケットのどこにも存在しないことを示している場合にのみ発生します。同様に、リモートソケットのL3は、回線が存在しない場合でも、コアを気にすることなくクロススヌープにすばやく応答できます。

したがって、包括的L3キャッシュは、ソケット間のコヒーレンシオーバーヘッドを最小限に抑える必要があります。これは、チップセットスヌープフィルターが原因ではありません。

于 2012-02-27T15:27:09.737 に答える
7

NUMAシステム(OpteronサーバーやItaniumなど)で実行する場合は理にかなっていますが、メモリを割り当てるのと同じNUMAノードにプロセスをバインドする必要があります。それ以外の場合、これは最適化に反します。NUMA対応のオペレーティングシステムは、何も言わなければ、実行とメモリを同じノードに維持しようとしますが、その能力を最大限に発揮することに注意してください(Windowsの一部の古いバージョンはかなり貧弱です)これで、しかし私はそれが最近のLinuxの場合であるとは思わないでしょう)。

NUMAシステムで実行しない場合、プロセスを特定のコアにバインドすることは、実行できる最大の愚かなことの1つです。OSは楽しみのためにCPU間でプロセスをバウンスさせません。また、プロセスを別のCPUに移動する必要がある場合、それは理想的ではありませんが、世界も終わりません。それはめったに起こりません、そして、それが起こるとき、あなたはほとんど言うことができません。
一方、プロセスがCPUにバインドされていて、別のCPUがアイドル状態の場合、OSはそれを使用できません...つまり、100%使用可能な処理能力が消費されます。

于 2012-02-27T14:22:15.787 に答える