こんにちはユキトモです。
今回は「スケジューリング」について簡単に解説していきます。
この記事でわかること
- スケジューリングの概要が分かります。
スケジューリング
簡単に言うと
「どのような順番で、どのCPUで、どのタスクを処理をするのかを決定する作業のこと」
です。
Linuxは、マルチタスクのOSです。
ですので多数のタスクを同時に処理する必要があります。
ですが実際には同時に多数のタスクを処理することは不可能です。
なのでCPUの処理時間を短い時間に区切って1つのCPUを切り替えて利用します。
スケジューリングは、この時「どのような順番で、どのCPUで、どのタスクを処理するか」を決める作業です。
このスケジューリングを行うためには、いろいろなタスクに対してCPUの処理時間を割り振るときに、
全体の効率を最大にするように割り振ることが重要になってきます。
一番簡単にするには、実行しているタスクに、同じ時間になるように割り振るという方法があります。
ですがこれはあまり良い方法とは言えません。
タスクはいろいろなものがあります。
複雑な演算を必要とするタスクから、CPUでは何もしないタスクも存在します。
同じタスクでも、処理待ちの時はほとんどCPUを必要としないけど、処理中にはCPUをたくさん使わなければならない場合もあります。
そういう理由で、同じ時間になるように均等に割り振るのはあまり良くない使い方です。
どれだけCPUを使うのかを考えて出した時間の割り振りが必要になります。
スケジューリングとはこのことを言います。
Linuxでは、kernel 2.6.22まで「O(1)スケジューラ」と言われるスケジューラを利用していました。
ですが、Linux 2.6.23以降、は、Completely Fair Scheduler(CFS)がスケジューラとして提供されています。
CFSでは、プロセスに実行する優先度をつけます。
そして、優先度に応じて時間を割り振っていきます。
実行する優先度は均等ではありません。
状況に応じて変動します。
CFSのもう一つの特徴に、
過去に割り当てられた時間が少ないプロセスに対しては優先度を上げる、
などのようにできるだけ公平性を確保するということもできるようになっています。
スケジューラは陰で力を発揮しているものと言えるでしょう。
チューニングを行う時は大事な存在になるので確認しておくといいでしょう。
以上、スケジューリングの概要の解説でした。