現在販売されているPCのCPUには複数のコアが搭載されており、カーネルは処理をそれぞれのコアに割り振りながら実行する仕組みになっている。どのコアで実行されるかはカーネルのスケジューラに依存する。しかし、ユーザーが明示的に使用するコアを指定することもできる。
Linuxではtasksetというコマンドを使って、また、FreeBSDではcpusetコマンドを使うことで実行コアを指定することができる。
HowtoForgeの記事「Linux taskset Command Tutorial for Beginners (with Examples)」が、Linuxのtasksetコマンドの簡単な使い方を紹介している。tasksetコマンドを利用することでプロセスを特定のコアで実行させることができる。tasksetやcpusetコマンドの主な使い方は次のとおりだ。
Linux tasksetコマンド | 内容 |
---|---|
taskset -p プロセスID | CPUアフィニティ情報を表示 |
taskset -cp プロセスID | CPUレンジを表示 |
taskset -p 0x11 プロセスID | アフィニティを0x11へ変更 |
taskset -cp 0,3 プロセスID | CPUレンジを設定 |
taskset 0xa コマンド | CPUアフィニティ0xaを指定してコマンドを実行 |
FreeBSD cpusetコマンド | 内容 |
---|---|
cpuset -c -l 0-4 コマンド | コマンドをCPU 0-4対応で実行 |
cpuset -g -p プロセスID | プロセスで初夏されるCPUマスクを実行 |
cpuset -l 0,2 -p プロセスID | コマンドをCPU0および2で実行(グループはそのまま) |
cpuset -l 0,2 -c -p cpusetプロセスID | コマンドをCPU0および2で実行 |
cpuset -g -i -p | cpusetのIDを表示 |
cpuset -s SETID -p プロセスID | 指定したプロセスを指定したSETIDへ移動 |
cpuset -C -c -l 0,2 -p プロセスID | 指定したプロセスを新しく作成したCPUSETに割り当て |
UNIX系のカーネルはハードウェアリソースをフルに使って処理を最短で終わらせるようにする傾向がある。このため、実行するコアを固定することは逆に処理が終わるまでの時間が延びることもあり、よく分からない状態ではプロセッサアフィニティを指定するtasksetやcpusetは使わないほうがよいと言える。
逆に、特定の仮想環境に特定のコアを固定で割り当てたいといった影響もよく理解している場合は、こうしたコマンドを便利に利用できる。