スケジューリングポリシーの種類とその説明はこの記事では扱いません。(後日追記する可能性はあるかもしれません)
スケジューリングポリシーを指定してプロセスを起動する方法
chrtコマンドを使います。-f でFIFOを指定。
$ sudo chrt -f 38 yes > /dev/null &
ポリシー確認。
$ sudo chrt -p 32407
pid 32407's current scheduling policy: SCHED_OTHER
pid 32407's current scheduling priority: 0
すると、SCHED_OTHERですね。なぜだ・・・
追加調査
$ sudo chrt -f 1 yes > /dev/null &
chrt -p で表示されるスケジューリングポリシーと、psコマンドのclsで表示されるスケジューリングポリシーが異なりますね。(FFがSCHED_FIFOのはず)
$ ps -C yes -o comm,pid,ppid,cls,rtprio,%cpu
COMMAND PID PPID CLS RTPRIO %CPU
yes 27629 27628 FF 1 94.2
$
$ chrt -p 27629
pid 27629's current scheduling policy: SCHED_OTHER
pid 27629's current scheduling priority: 0
なぜだ・・・
閑話
同じプログラムを実行している以下の二つのプロセス
(1) SCHED_FIFOのプロセスをchrtでSCHED_OTHERにしたプロセス
(2) SCHED_OTHERのプロセス
topの出力を見るとどちらも同じくらいのCPU使用率になるのだが
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
626 ec2-user 20 0 132m 7088 4304 R 49.8 0.7 7:53.42 cpu_bound.py
722 ec2-user 20 0 132m 6980 4196 R 49.8 0.7 3:45.94 cpu_bound.py
psコマンドで確認すると、以下のような感じでCPU使用率に偏りが出ている。
[ec2-user@ip-172-21-0-185 experiment]$ ps -C cpu_bound.py -o comm,pid,ppid,cls,rtprio,pri,ni,%cpu
COMMAND PID PPID CLS RTPRIO PRI NI %CPU
cpu_bound.py 626 26292 TS - 19 0 69.1
cpu_bound.py 722 26292 TS - 19 0 35.4
なぜだ・・・
さらに、%CPUの合計が100を超えるのもなぞ。
さらに分かったこと
topのCPU使用率はtopの前の更新からのCPU専有率だが、psはプロセスが起動してからのCPUを使用した割合であるらしい。
https://hacknote.jp/archives/10596/https://hacknote.jp/archives/10596/
それならpsの%CPUが100%にならないのも納得。