LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

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

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

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

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
What you can do with signing up
0