Linuxでプロセスのプロセッサアフィニティを設定するには?
答え1
これにはワークセットを使用しました。ワークセットがインストールされている場合は、次のようになります。
taskset -cp 0,2 45678
CPU 1 および 3 とプリファレンスを持つように ID 45678 のプロセスを設定します。
答え2
プロセス内の呼び出しは、sched_setaffinity()
またはpthreadsエントリの場合pthread_setaffinity_np()
これに関して、プログラムのCPUの好みが心配な場合は、プログラムがメモリを割り当てる方法にも注意を払う価値があります。複数のコントローラ(つまり、それぞれ独自に複数のCPUソケット)に接続されたメモリを持つ大規模システムでは、異なるCPUとメモリのペア間の待ち時間と帯域幅が可変です。 NUMAが使用するコマンドまたはシステムコールを使用して、NUMAの依存関係を調べることもnumactl
できます。私が作業したプログラムでは、これはパフォーマンスを10%向上させました。
答え3
schedutils
(Linuxスケジューラユーティリティ)をインストールする必要があります。私はUbuntuデスクトップで使用しました。
SFエクスプレス協会
答え4
taskset -c 1-3 ./a.out arg1 arg2
a.out
指定されたパラメーターとプロセッサー1、2、または3(0から)に設定されたプリファレンスを使用してプロセスを開始します。
以下は、実際に動作するように見える最小限のCテストプログラムです。https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from-c/50117787#50117787