taskset - プロセスの CPU アフィニティを設定または取得する
taskset [options] mask command [argument...]
taskset [options] -p [mask] pid
taskset コマンドは、 pid によって指定される実行中プロセスのCPU アフィニティ (affinity) の設定または取得を行う。 また、 指定された CPU アフィニティを使って、 新たな command を起動する。 CPU アフィニティとは、 スケジューラープロパティの 1 つであり、 システム上のプロセスに対して、 指定された CPU 数を結びつける。 Linux スケジューラーは、 指定されている CPU アフィニティに従うため、そのプロセスが、 別の CPU 上で動作することはない。 Linux スケジューラーは、 ナチュラル CPU アフィニティもサポートする。 つまりスケジューラーは、 性能が実用的に確保される限り、 プロセスの利用するCPU は、 同一のものを維持する。 したがって、 CPU アフィニティを所定のものに限定することは、 特定のアプリケーションにとってのみ有効なものである。
CPU アフィニティは、 ビットマスクとして表現される。 最下位ビットが 1 つめの論理 CPU を表し、 最上位ビットが最終の論理 CPU を表す。 対象のシステムには、 指定分の CPU が存在しないかもしれないが、 マスク値では、 存在しない CPU を指定することが可能である。 取得されたマスクは、 各ビットに対応するシステム上の物理 CPU を表現する。 不正なマスクが指定された場合 (たとえば現システム上に、 適正な CPU が存在しない場合)、 エラーが返される。 マスクは 16 進数による指定が可能である (先頭に "0x" をつけてもつけなくてもよい)。 また --cpu-list オプションを使って、 CPU のリストとすることもできる。指定例は以下のとおりである。
0x00000001
プロセッサー #0 を表す。
0x00000003
プロセッサー #0 と #1 を表す。
0xFFFFFFFF
#0 から #31 までのプロセッサーを表す。
32
プロセッサー #1、 #4、 #5 を表す。
--cpu-list 0-2,6
プロセッサー #0、 #1、 #2、 #6 を表す。
--cpu-list 0-10:2
プロセッサー #0、 #2、 #4、 #6、 #8、 #10 を表す。 サフィックス ":N" は、 その範囲内の飛び幅を指定する。 たとえば 0-10:3 であれば、 0,3,6,9 というリストとして解釈される。
taskset が返ってくると、 指定されていたプログラムは、 適正な CPU にスケジューリングされていることが保証される。
-a, --all-tasks
指定された PID に対応するすべてのタスク (スレッド) の CPU アフィニティを、 設定または取得する。
-c, --cpu-list
mask がビットマスクではなく、 プロセッサーを表現した数値リストであると解釈する。 数値はカンマで区切るか、 範囲指定を行う。 たとえば 0,5,8-11 のようにする。
-p, --pid
既存の PID に対しての操作を行い、 新たなタスクの起動は行わない。
-h, --help
ヘルプを表示して終了する。
-V, --version
バージョンを表示して終了する。
デフォルトの動作は、 指定されたアフィニティマスクを使って、 新たなコマンドを実行する。
taskset mask command [arguments]
既存のタスクに対して、 CPU アフィニティを取得することもできる。
taskset -p pid
また設定するには、 以下のようにする。
taskset -p mask pid
ユーザーが CPU アフィニティを変更できるプロセスは、 そのプロセスが自身に属しているプロセス場合である。 他ユーザーに属するプロセスの CPU アフィニティを変更するには、 CAP_SYS_NICE を有していなければならない。 ユーザーは、 どのプロセスに対しても、 アフィニティマスクを取得することは可能である。
Robert M. Love によって書かれた。
Copyright (co 2004 Robert M. Love. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
chrt(1), nice(1), renice(1), sched_getaffinity(2), sched_setaffinity(2)
Linux スケジューリングスキームについての説明は、 sched(7) を参照のこと。
バグ報告は、 以下にある issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.
taskset コマンドは util-linux パッケージの一部であり、 以下からダウンロードできる。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.