Linuxプラットフォームでプロセスを実行するように(システム全体)CPUアフィニティを設定する

Linuxプラットフォームでプロセスを実行するように(システム全体)CPUアフィニティを設定する

私は複数の並列アプリケーション(OpenMP / pthreadedアプリケーションなど)をスケジュールし、Linuxベースのマルチプロセッサプラットフォームの特定の(パーティション化された)コアでアプリケーションを実行する方法について研究しています。

sched_setaffinity()システムコールを使用して、各アプリケーションのCPUアフィニティを設定できます。ただし、ご存知のように、Linuxは(すべての)実行中のプログラムも管理します。そのため、予約済みアプリケーションの実行がLinux上で予約されている他のプロセスによって中断されることがあります。

すべてのプロセスとデーモン(予約済みアプリケーションを除く)をCPU 0に設定したいと思います。私の最初の考えは、カーネルモジュールのinitタスクですべてのタスクを繰り返してCPU 0を手動で設定することでした。ただし、結果はLinuxのロードバランシングの影響を受けます。 Linux CPUのロードバランシングをオフまたは管理する別の方法が必要です。

これを行う方法やシステム構成はありますか?私のターゲットプラットフォームはAMD Opteronサーバー(64コアを含む)で、Linuxバージョンは3.19です。

答え1

カーネルに最初のCPUのみを使用するように指示して、N自動ロードバランシングを無効にできる必要があります。たとえば、ブートパラメータに次を追加すると、システム全体がCPU#0で効果的に実行されます(システムは単一のCPUのみを使用するため)。

maxcpus=1

次に、または同様のものを使用してtaskset別のCPUでプロセスを実行します。

関連情報