『Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識』第4章[後編]
第4章 プロセススケジューラ[後編]
はじめに
武内 覚 著『Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識』をテキストとして学習した記録です。
本書を読んで筆者が解釈した内容について記述しています。
なので本書の内容の間違った解釈やあるいは単純に間違った記述がある可能性があります。
概要
プロセスにはいくつかの状態がある。
それらのなかには実行待ち状態やスリープ状態などプロセスが進捗しない状態も含まれる。
プロセスはその一生で状態をいくつか遷移し、一生を終える。
CPUは場合によって何もしていないように見える時があるが、そういう時はアイドルプロセスと呼ばれる「何もしない」ためのプロセスが動いている。
性能の指標にはスループットとレイテンシがある。 スループットは時間あたりにこなした仕事量。レイテンシは処理にかかった時間。両者ともに値が高いほど性能も高いと言える。
性能を高めるためにはプロセスが進捗しない時間を減らしたり、CPUが暇になるアイドル状態が生じないようにCPUにプロセスを割り当てることが重要になりそうである。
そのためにプロセススケジューラが担う役割はどんなものか?
論理CPUが複数の場合のスケジューリング
論理CPUが複数ある場合はロードバランサがプロセスを公平に分配する役割を果たす。
マルチコアCPU環境(論理CPUが複数ある環境)であっても複数プロセスを同時に実行できない場合はスループットは上がらない。例えば各プロセスを直列で処理する必要がある場合はそのようになる。
プロセス数が論理CPUの合計よりも多い場合はスループットが論理CPUの数によって向上することは無い。
経過時間と使用時間
timeコマンドでプロセスを作成するとプロセスの経過時間
と使用時間
の二つの値を得ることができる。それぞれの意味は下記の通り。
- 経過時間
- プロセスを開始してから完了するまでにかかった時間
- 使用時間
- そのプロセスが論理CPUを使用した時間
プロセスの状態と経過時間・使用時間
中編で学んだようにプロセスにはいくつかの状態がある。実行状態のみそのプロセスが実際に進捗している状態である。 また、実行状態が唯一論理CPUの時間を使っている状態となり、使用時間が増えている状態となる。
下記のような状態の場合は経過時間のみが増えている状態となる。
- 複数のプロセスが存在していて他のプロセスが実行中の実行待ち状態。
- そのプロセスが何らかのイベントを待っているスリープ状態。
論理CPUの数と経過時間・使用時間
論理CPUが複数の場合のスケジューリング
で見たように複数の論理CPUがあれば複数のプロセスがあってもそれぞれのCPUになるべく公平になるように割り振られる。
担当するプロセスをそれぞれのCPUが時間を使って実行していくので使用時間の合計が経過時間よりも多くなるということも起きる。
動いているCPUの数だけ使用時間があると考えられる。
これは人工の考え方と同じ。 二人の人がある一日を使ってある作業をしたとすると一日しか経っていなくても二人日分の仕事ができる。
この場合経過日数は一日で使用日数は二日と言える。
優先度
プロセスはCPUの時間を平等に与えられるが、これに優先順位を持たせることもできる。
nice()コマンドを使うことでそれが実現することができプロセスに使用されるCPU時間の割合を-19から20の段階に応じて調整することができる。