web-dev-qa-db-ja.com

CPUコアを1つだけ使用する

並行プログラムのパフォーマンステストを実行する必要があります。私の要件は、それを1つだけ CPUコアで実行する必要があることです。 (スレッドを協調させたくありません-常にコンテキストを切り替えたいです)。

だから私は2つの質問があります:

  1. 最善の解決策-(CPUコアを使用しないようにOSを強制するために)自分のプログラムに対してのみ1つのCPUコアのみに署名して予約する方法。それは不可能だと思いますが、おそらく私は間違っています...

  2. 1つのCPUコアのみを使用するようにLinux(Fedora 24)を設定する方法は?

9
peter55555

Linuxでは、プロセスのCPUアフィニティを設定するシステムコールは sched_setaffinity です。次に、コマンドラインで taskset tool を実行します。

その単一のプログラムを1つのCPUだけで実行するには、次のようなものが必要だと思います

taskset -c 1 ./myprogram

-cスイッチの引数として任意のCPU番号を設定します。)

他のプロセスが測定したいプロセスと比較してあまり実行されないか、他のプロセスが他のCPUにスケジュールされている限り、これはシングルプロセッサシステムに十分近いはずです。 1つのCPUをその単一のプロセス専用にするonlyようにし、otherプロセスがそのCPUで実行されていない場合は、それらのアフィニティも設定する必要があります。

それは、私が適切に行う方法を知らないことです。ブートプロセスの非常に早い段階でinitのプロセッサアフィニティを設定して、システム上のすべてのプロセスに確実に継承されるようにする必要があります。回避策として、他のすべてのプロセスに対してtaskset -c -p 0 $PIDを使用して、強制的にCPU#0でのみ実行することができます。

systemdにもCPUAffinity= があり、ユニットファイルのアフィニティを制御します。ここでは、デフォルトのアフィニティの設定に カップルquestions があります。 unix.SE、しかし私は良い解決策を見つけることができませんでした。

@ Kamil Maciorowski がコメントし、 superuser.comの別の質問に答えた であるにもかかわらず、 kernel command lineisolcpus=1を設定する必要があります "そのCPUを一般的なスケジューリングアルゴリズムから分離します。

26
ilkkachu