Linuxのスケジュール管理は、スケジューリングポリシーと 「静的」なスケジューリング優先度 sched_priority に基づいてスケジュール管理を行なう。
sched_priority に 0 を指定する通常ポリシーでは、nice値として -20 から 19 の範囲の値で、スケジューリングの優先度を定める。nice値のデフォルトの優先度は 0 である。
小さな数字ほど、有利なスケジューリングとなる。
$ sudo chrt -f -p <プライオリティ> <pid> -f SCHED_FIFO を指定する場合 -r SCHED_RR を指定する場合(デフォルト) -o SCHED_OTHER を指定する場合 $ sudo renice -n <nice値> -p <pid>
$ cat /proc/[pid]/sched policy : スケジューリングポリシー /include/uapi/linux/sched.h #define SCHED_NORMAL 0 #define SCHED_FIFO 1 #define SCHED_RR 2 #define SCHED_BATCH 3 #define SCHED_IDLE 5 prio : タスクの優先度(0-139) RTタスクは 0 - 99、CFSクラスは 100 - 139 の値。nice値は -20 - 19 の範囲で動かせるが、 CFSクラスの優先度デフォルト値が 120 なので、120 + nice がカーネル内で使われる (CFSクラスの) タスクの優先度。
$ cat /proc/[pid]/stat | awk -F' ' '{print $18,$19}' 1 pid プロセスID 2 comm 実行ファイル名 3 state 状態:"RSDZTW" のどれか1文字 4 ppid 親プロセスID 18 priority リアルタイム・スケジューリングポリシーのスケジューリング優先度 スケジューリング優先度を マイナスにした値で、値は -2 から -100 までの範囲の数値となり それぞれリアルタイム優先度の 1 から 99 に対応する。 19 nice nice値
/proc/[pid]/sched | /proc/[pid]/stat | priority | nice | |||
prio | priority | nice | ||||
RTタスク | 0 | -100 | 0 | 99 | 0 | SCHED_FIFO、SCHED_RR の最高 |
1 | -99 | 0 | 98 | 0 | ||
97 | -3 | 0 | 2 | 0 | ||
98 | -2 | 0 | 1 | 0 | SCHED_FIFO、SCHED_RR の最低 | |
CFSクラス | 100 | 0 | -20 | 0 | -20 | SCHED_OTHER、SCHED_BATCH の最高 |
101 | 1 | -19 | 0 | -19 | ||
119 | 19 | -1 | 0 | -1 | ||
120 | 20 | 0 | 0 | 0 | SCHED_OTHER、SCHED_BATCH のデフォルト | |
121 | 21 | 1 | 0 | 1 | ||
138 | 38 | 18 | 0 | 18 | ||
139 | 39 | 19 | 0 | 19 | SCHED_OTHER、SCHED_BATCH の最低 |
参照:PROC