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

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

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

答え1

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

taskset -cp 0,2 45678

ID 45678 のプロセスに CPU 1 と 3 へのアフィニティを設定します。

答え2

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

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

答え3

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

SFリンク

答え4

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

関連情報