LoginSignup
0

More than 3 years have passed since last update.

Linuxでスケジューリングポリシーを指定してプロセスを起動する

Last updated at Posted at 2020-01-21

スケジューリングポリシーの種類とその説明はこの記事では扱いません。(後日追記する可能性はあるかもしれません)

スケジューリングポリシーを指定してプロセスを起動する方法

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%にならないのも納得。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0