『Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識』第4章[中篇]
第4章 プロセススケジューラ[中篇]
はじめに
武内 覚 著『Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識』をテキストとして学習した記録です。
本書を読んで筆者が解釈した内容について記述しています。
なので本書の内容の間違った解釈やあるいは単純に間違った記述がある可能性があります。
概要
プロセスにはいくつかの状態がある。
それらのなかには実行待ち状態やスリープ状態などプロセスが進捗しない状態も含まれる。
プロセスはその一生で状態をいくつか遷移し、一生を終える。
CPUは場合によって何もしていないように見える時があるが、そういう時はアイドルプロセスと呼ばれる「何もしない」ためのプロセスが動いている。
性能の指標にはスループットとレイテンシがある。 スループットは時間あたりにこなした仕事量。レイテンシは処理にかかった時間。両者ともに値が高いほど性能も高いと言える。
性能を高めるためにはプロセスが進捗しない時間を減らしたり、CPUが暇になるアイドル状態が生じないようにCPUにプロセスを割り当てることが重要になりそうである。
そのためにプロセススケジューラが担う役割はどんなものか?
プロセスの状態
プロセスにはいくつかの状態がある。
- 実行状態: 論理CPUの時間を使用している
- 実行待ち状態: CPUの時間が空くのを待っている
- スリープ状態: イベントの発生を待っている。CPUが空くのを待っている訳ではない。
- ゾンビ状態: プロセスは終了したが、親のプロセスがまだ終わっていなくてその終了を待っている。
通常多くのプロセスがいくつも同時に発生しているが、論理CPUの数はそのプロセスよりも少数である。そしてCPUが一度にできる仕事は一つだけ。 なので論理CPUが順番に色々な仕事をこなしていく中で、プロセスはたとえスリープ状態でなかったとしても自分の出番を待つ実行待ち状態が生じる。
アイドル状態
逆にCPUに仕事が来なくなる場合もある。 プロセスがないかあっても全てスリープ状態であればCPUが暇になってしまう。 sarコマンドで確認してみると実際にほとんどのプロセスはスリープ状態であるためCPU時間のほとんどがアイドル状態となっている。
性能指標 スループットとレイテンシ
- スループット: 時間あたりにこなした仕事の量
- レイテンシ: 仕事を完了するのにかかった時間
これらはCPUに限らず別のデバイスでも同様に用いられる指標である。 今回の話はCPUについて。
スループットはCPUが一定時間内にどれだけ多くのプロセスを完了させられるかに焦点が当てられている。なのでCPUが暇している状態(アイドル状態)が多いほどスループットは下がるということが言える。
レイテンシは一つのプロセスに焦点を当ててそのプロセスが開始されてからいかに短時間で完了されるかを測るものである。前篇で学んだようにプロセスはスケジューラに(ラウンドロビン方式の場合)均等なローテーションで実行される。CPU時間がスケジューラによって他のプロセスに使われている場合は実行待ち状態となっている。当然待っている時間が長いほどレイテンシは大きくなるので、プロセスの数は少ないほどレイテンシが小さくなると言えそうである。
スループットはCPUのアイドル状態が短いほど高くなる。プロセスが少数の場合それらのプロセスがスリープ状態になって暇になるリスクが高いので、スループット的な観点からみるとプロセスの数は多いほど良い。 しかしすでに見たようにレイテンシを考えるとプロセス数は少ないほど良いと言える。