私の同時プログラムのパフォーマンステストを実行する必要があります。私の要件は、このプログラムを次から実行する必要があることです。単一CPUコア。 (私は協力スレッドを望んでいません。常にコンテキスト切り替えがあることを願っています)。
だから、2つの質問があります。
最善の解決策 - 私のプログラムに対して1つのCPUコアだけを署名して予約する方法(OSがそのCPUコアを使用しないように強制するため)は不可能ですが、多分間違っている可能性があります...
1つのCPUコアのみを使用するようにLinux(Fedora 24)を設定するには?
答え1
LinuxでプロセスのCPUアフィニティを設定するシステムコールは次のとおりです。 sched_setaffinity
。それからそこにtaskset
ツールコマンドラインでこれを行います。
1つのCPUでのみ単一のプログラムを実行するには、次のことが必要だと思います。
taskset -c 1 ./myprogram
(CPU番号を-c
スイッチのパラメータに設定します。)
他のプロセスが測定しようとしているプロセスと比較して実行しすぎない場合、または別のCPUに予約されている限り、これは単一のプロセッサシステムに十分近い必要があります。その単一プロセスにCPUのみを使用する場合ただ、防止その他プロセスがそのCPUで実行されていない場合は、好みも設定する必要があります。
私いいえ正しく実行する方法を知ってください。init
システム内のすべてのプロセスに継承するには、起動プロセスの最初にプロセッサの優先度を設定する必要があります。回避策として、taskset -c -p 0 $PID
他のすべてのプロセスを使用してCPU#0でのみ実行することができます。
systemdにもありますCPUAffinity=
ユニットファイルの好みを制御し、カップル~の質問unix.SEではデフォルトの好み設定について説明しましたが、良い解決策が見つかりませんでした。
たとえツイートをサイトに埋め込む コメントとsuperuser.comの他の質問に回答しました。、設定isolcpus=1
するカーネルコマンドラインこれは「このCPUを共通のスケジューリングアルゴリズムから切り離す」必要があります。これはおそらくあなたが望むものです。