WindowsアフィニティはハイパースレッドCPUとどのように機能しますか?


1

要件について詳しく説明します。NICカードを介してIPデータをキャプチャし、キャプチャしたデータをリアルタイムで処理する必要がある、ある種の割り当てを行っています。キャプチャされたデータの処理は、CPUの可用性に応じて部分的または完全に実行できます。しかし、できることはすべてリアルタイムで行われます。

私たちのアーキテクチャは次のようなものです。1つのスレッドを使用して、NICカードからIPデータをキャプチャします。また、キャプチャされたデータをリアルタイムで処理するためにスレッドの数が作成され、この数はCPU組み込みスレッドである任意の数(たとえば500)に達する可能性があります。

観察結果は次のとおりです。IPデータキャプチャ用のスレッドが1つあることに注意してください。作成する処理スレッドの数を減らし(たとえば10)、合計で約95%のCPUを消費する場合、IPデータキャプチャスレッドにまったく問題はありません。しかし、大量の処理スレッド(たとえば250)を作成し、合計で約80%のCPUを消費すると、キャプチャスレッドはIPデータを適切にキャプチャできません。後者の場合、CPUの可用性は高くなりますが、問題が発生します。

そのため、問題の原因はスレッドの数とそのスケジューリング(コンテキストの切り替え)である可能性があります。スレッド間のCPU配分は次のように考えました。アフィニティを使用して、25%のコアをスレッドのキャプチャに設定し、75%のコアを他の処理スレッドに設定します。

To start with this, we wrote a simple program on a quad core i7 machine with HT ON. Suppose the logical cores are A1 A2 B1 B2 C1 C2 D1 D2 (A B C D being the real cores). Our sample thread is such that it consumes the all resources on a single HT core. So if I run 8 such threads on total 8 logical cores, CPU consumption shows 100%. Now we tried to assign affinity. If we create 2 cores and set affinity to A1 and B1 (It's not one thread to A1 and other thread to B1, it's combined affinity for two threads), then it works fine and CPU usage shows 25%. But if we set combined affinity to A1 and A2 for two threads, then only 12.5% is consumed (task manager shows only one core is used). But if we set affinity of 4 threads to A1, A2, B1, B2, then CPU usage shows 50%. So the question is why the second case (12.5%) is not working?


違いはありません。Windowsは、HTコアを物理ストアの処理方法とまったく同じように処理します。私が正直に言うあなたの質問は非常に紛らわしいです。あなたが尋ねたい質問をするのに本当に必要ではない多くの情報。
ラムハウンド14

2
Windowsに提供するオプションの数を減らすと、より悪い選択をすることになります。ほとんど間違いなく、CPUの親和性をいじってはいけません。スケジューラは、クロックブースト、コア温度、割り込みやハードウェアサービスなどからの要求などを理解しているため、ユーザーよりもはるかに優れたジョブを実行できます。
デビッドシュワルツ14

@Priyankar Ghosh:なぜ250の処理スレッドを作成するのですか?クアッドコアPCは4つ以上同時に実行できません。処理スレッドがそれらを待機状態にするI / Oを使用している場合、そのボトルネックを減らす方法を見つけた方が確実です。
ジェームズP 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.