69

Linux で特定の特定のプロセスに 1 つの CPU コアを割り当てる方法はありますか? このコアでスケジュールされる他のプロセスや割り込みハンドラーが存在してはなりませんか?

Linux Binding Processes to CPUs using the taskset utilityでプロセス アフィニティについて読んだことがありますが、特定のプロセスをそのコアに関連付けようとするだけなので、問題は解決しませんが、このコアで他のプロセスがスケジュールされている可能性があります。避けたいこと。

スケジューリングのためにカーネル コードを変更する必要がありますか?

4

5 に答える 5

75

はいあります。実際、それを行うには2つの別々の方法があります:-)

今のところ、あなたが望むことを達成するための最良の方法は、以下を行うことです:

  1. 起動中に、ブートローダーからLinuxカーネルコマンドラインにパラメーターisolcpus=[cpu_number]を追加します。これにより、CPUアフィニティを使用して特に要求されない限り、そのCPUで通常のタスクを実行しないようにLinuxスケジューラに指示されます。

  2. IRQアフィニティを使用して、他のCPUがすべての割り込みを処理するように設定し、分離されたCPUが割り込みを受信しないようにします。

  3. CPUアフィニティを使用して、特定のタスクを分離されたCPUに固定します。

これにより、ツリー外および開発中のパッチなしでCPU分離に関してLinuxが提供できる最高のものが得られます。

タスクは、タイマーティック割り込みやスケジューラコード、他のCPUからのIPI、ワークキューカーネルスレッドなどの他のタスクを含むLinuxコードによって時々中断されますが、中断はごくわずかである必要があります。

中断ソースの(ほぼ)完全なリストについては、 https://github.com/gby/linux/wikiの私のページをチェックしてください。

別の方法は、はるかにエレガントで動的なcpusetsを使用することですが、この時点ではいくつかの弱点があり(たとえば、タイマーの移行はありません)、古い、粗いが効果的なisolcpusパラメーターをお勧めします。

Linuxコミュニティは現在、これらすべての問題に対処し、さらに優れた分離を実現するための作業を行っていることに注意してください。

于 2012-11-27T13:32:19.937 に答える
5

CPU コア全体を特定のプログラム専用にする

タスクセットを使用すると、特定のプログラムを特定の CPU に割り当てることができますが、それは、それらの CPU で他のプログラムやプロセスがスケジュールされないという意味ではありません。これを防ぎ、CPU コア全体を特定のプログラム専用にする場合は、「isolcpus」カーネル パラメータを使用して、起動時に CPU コアを予約することができます。

ブート時にカーネル パラメーター「isolcpus=」をブート ローダーまたは GRUB 構成ファイルに追加します。Linux スケジューラは、タスクセットで特に要求されない限り、予約された CPU コアで通常のプロセスをスケジュールしません。たとえば、CPU コア 0 と 1 を予約するには、「isolcpus=0,1」カーネル パラメータを追加します。起動時に、taskset を使用して、予約済みの CPU コアをプログラムに安全に割り当てます。

ソース

  1. http://xmodulo.com/2013/10/run-program-process-specific-cpu-cores-linux.html
  2. http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re46.html
于 2014-09-11T07:38:15.090 に答える
4

gby の回答の手順に従っても、カーネル タスクは分離された CPU コアで実行されます。これを改善するために、Linux RT_PREEMPT リアルタイム プロジェクトで作業が進行中です。そのため、RP_PREEMPT の最先端のリアルタイム カーネルを使用していない場合、CPU コアを完全に分離することはできない可能性があります。

于 2012-11-29T07:31:30.540 に答える
0

ドキュメントによると

Linux スケジューラは指定された CPU アフィニティを尊重し、プロセスは他の CPU では実行されません。

排他的に処理するために特定のプロセッサが与えられるという言及はありません。

于 2012-11-27T11:30:38.100 に答える