各スレッドが各コアで実行されるマルチスレッドプログラムのLinuxでCPUアフィニティを設定すると、他のプロセスがそのコアのOSによってスケジュールされるのを効果的にブロックできます。事実上、プロセスでのコアの使用を保証し、他のすべての重要ではないプログラムを最小限の数のコアにバインドしたいと考えています。
または、Linuxスケジューラーで何かが足りないのでしょうか、それとも自分で何かが必要なのかもしれません。
各スレッドが各コアで実行されるマルチスレッドプログラムのLinuxでCPUアフィニティを設定すると、他のプロセスがそのコアのOSによってスケジュールされるのを効果的にブロックできます。事実上、プロセスでのコアの使用を保証し、他のすべての重要ではないプログラムを最小限の数のコアにバインドしたいと考えています。
または、Linuxスケジューラーで何かが足りないのでしょうか、それとも自分で何かが必要なのかもしれません。
LinuxでマルチスレッドプログラムのCPUアフィニティを設定できます。このプログラムでは、各スレッドが各コアで実行され、他のプロセスがそのコアのOSによってスケジュールされるのを効果的にブロックします。
いいえ、CPUアフィニティを設定すると、スケジューラがスレッドに一部のコアを使用できなくなります。つまり、特定のコアでスレッドをスケジュールするだけで、他のスレッドには何もしません。
を使用して、おそらく目的を達成できますsetpriority
。要件がそれほど厳しい場合は、またはを調べてsched_setscheduler
選択することができます。SCHED_RR
SCHED_FIFO
スケジューラが積極的に関与している場合、taskset と nice はスケジューラに好みに関するヒントを与えるだけです。スケジューラは、ワークロードに基づいて、使用可能なコアのスレッドを自由に再スケジュールできます。perfを使用して、コンテキストの切り替えと CPU の移行を監視できます。
次の 2 つのオプションがあります。
お役に立てば幸いです。