web-dev-qa-db-ja.com

Linuxでプロセスのプロセッサアフィニティを設定するにはどうすればよいですか?

Linuxでプロセスのプロセッサアフィニティを設定するにはどうすればよいですか?

31
chillitom

これにはタスクセットを使用しました。タスクセットがインストールされている場合は、次のようになります。

taskset -c 0,2 -p 45678

id 45678のプロセスをcpus 1および3との親和性を持つように設定します。

26
kbyrd

プロセス内では、呼び出しはsched_setaffinity()、またはpthreadsの場合はpthread_setaffinity_np()になります。

関連する注意点として、プログラムのCPUアフィニティについて心配している場合は、メモリの割り当て方法にも注意を払うことをお勧めします。メモリが複数のコントローラに接続されている大規模なシステム(つまり、それぞれが独自の複数のCPUソケット)では、異なるCPUとメモリのペア間でレイテンシと帯域幅が変化します。 numactlコマンドまたはそれが機能するシステムコールを使用して、NUMAアフィニティも調査する必要があります。私が取り組んだ1つのプログラムは、これによりパフォーマンスが10%向上しました。

7
Phil Miller

schedutils(Linuxスケジューラユーティリティ)をインストールする必要があります。 Ubuntuデスクトップで使用しています。

SF リンク

3
Hemant
taskset -c 1-3 ./a.out arg1 arg2

a.out指定された引数とプロセッサ1、2、または3(ゼロベース)に設定されたアフィニティを持つプロセス。

実際の動作を確認するために使用できる最小限のCテストプログラムを次に示します。 https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in -linux-from-c/50117787#50117787