現在販売されている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は使わないほうがよいと言える。

逆に、特定の仮想環境に特定のコアを固定で割り当てたいといった影響もよく理解している場合は、こうしたコマンドを便利に利用できる。