名前

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/>.