全力で怠けたい

怠けるために全力を尽くしたいブログ。

プロセスが使う CPU を取得したり指定する taskset コマンドの使い方のメモ。

プロセスが使う CPU を取得したり指定する taskset コマンドの使い方のメモ。

taskset コマンドのバージョン。

$ taskset --version
taskset from util-linux 2.34

taskset コマンドの使い方

taskset コマンドはプロセスが使う CPU を取得したり指定するコマンド。

自分は普段そんなに使わなくてたまに使うくらいなんだけど、たまにしか使わなくてよく使い方を忘れて調べたりするのでメモしておく。

既存のプロセスが使える CPU を取得する

-p <PID> を指定するとプロセスが使える CPU を取得する。

現在のシェルのプロセスが使える CPU を取得するのはこんな感じ。 0-3 の表示はシェルのプロセスが #0, #1, #2#3 の CPU が使えるということ。

$ taskset -c -p $$
pid 7351's current affinity list: 0-3

プロセスが使える CPU を指定してプロセスを起動する

taskset コマンドはプロセスが使える CPU を指定してコマンドを起動できる。

-c <CPU> を指定するとプロセスが使える CPU を指定してコマンドを起動する。 bash#0 の CPU だけを使えるようにコマンドを起動するのはこんな感じ。

$ taskset -c 0 bash -c 'taskset -c -p $$'
pid 8617's current affinity list: 0

bash#0#1 の CPU を使えるようにコマンドを起動するのはこんな感じで CPU をカンマ (,) 区切りで指定する 。

$ taskset -c 0,1 bash -c 'taskset -c -p $$'
pid 8625's current affinity list: 0,1

CPU はハイフン (-) で任意の範囲の CPU を指定できる。 bash#0#1 の CPU を使えるようにコマンドを起動するのはこんな感じ。

$ taskset -c 0-1 bash -c 'taskset -c -p $$'
pid 8627's current affinity list: 0,1

CPU はカンマ (,) とハイフン (-) の両方で指定することができる。 bash#0,#1#3 の CPU を使えるようにコマンドを起動するのはこんな感じ。

$ taskset -c 0-1,3 bash -c 'taskset -c -p $$'
pid 8633's current affinity list: 0,1,3

<start>-<end>:<stride> みたいに指定すると <start> から <end> の範囲で <stride> ごとの CPU を使うように指定できる。

$ taskset -c 0-10:3 bash -c 'taskset -c -p $$'
pid 8634's current affinity list: 0,3,6,9

既存のプロセスが使える CPU を指定する

taskset コマンドは既存のプロセスが使える CPU を変更できる。

-p <CPU> <PID> を指定すると <PID> のプロセス ID のプロセスが使える CPU を <CPU> に変更する。

現在のシェルのプロセスが使える CPU を取得すると 0-3 が表示してシェルのプロセスが #0, #1, #2#3 の CPU が使えるのが分かるけど、taskset -c -p 0 $$ を実行したあとは #0 の CPU だけが使えるようになる。

$ taskset -c -p 0 $$
pid 7351's current affinity list: 0-3
pid 7351's new affinity list: 0

$ taskset -c -p $$
pid 7351's current affinity list: 0

CPU はビットマスクで指定したり表示もできる

taskset コマンドは CPU の指定はデフォルトではビットマスクで指定する。 #0 の CPU を使うならこんな感じで 0 を指定するし #0#1 の CPU を使うなら 3 を指定するけど、 -c オプションを指定するとビットマスクじゃなくて数値のリストで CPU を指定できる。

#0#1 の CPU を使うならこんな感じで数値のリストでも指定できるしビットマスクでも指定できる。

$ taskset -c 0,1 bash -c 'taskset -c -p $$'
pid 8736's current affinity list: 0,1

$ taskset 3 bash -c 'taskset -c -p $$'
pid 8738's current affinity list: 0,1

#0, #1#3 の CPU を使うならこんな感じで数値のリストでも指定できるしビットマスクでも指定できる。

$ taskset -c 0,1,3 bash -c 'taskset -c -p $$'
pid 8873's current affinity list: 0,1,3

$ taskset b bash -c 'taskset -c -p $$'
pid 8869's current affinity list: 0,1,3

既存のプロセスが使える CPU を取得するのは CPU を数値のリストじゃなくてビットマスクで表示することもできる。 -c オプションを指定しなかったら CPU が使える CPU を数値のリストじゃなくてビットマスクで表示する。

$ taskset -c 0,1,3 bash -c 'taskset -p $$'
pid 8880's current affinity mask: b

参考サイト