Linux豆知識 133

スケジューリング

今回は、「スケジューリング」について。

Linuxは、マルチタスクのOSです。したがって、多数のタスクを同時に処理する必要があります。といっても、本当に同時に多数のタスクを進めることは不可能ですので、CPUの処理時間を短い時間に区切り、1つのCPUを切り替えて利用する、というのは以前に取り上げた通りです。

スケジューリングは、このときに「どのような順番で、どのCPUで、どのタスクを処理するか」を決める作業です。ネーミングそのままですので、納得がしやすいのではないかと思います。

さて、このスケジューリングを行うために大切なことは、さまざまなタスクに対してCPUの処理時間を割り振るときに、「全体の効率を最大にするように割り振ること」です。

一番単純なのは、「実行しているタスクに、均等に時間を割り振る」という手法です。しかし、これはあまり上手い方法ではありません。タスクといってもさまざまなものがあります。複雑な演算を必要とするタスクから、CPUではほとんど何もしないタスクもあります。同じタスクでも、処理待ちの際はほとんどCPUを必要としないが、処理中にはCPUをフルパワーで活用しなくてはならない場合もあります。そうなると、均等に時間を割り振るのは良い方法ではありません。どれだけCPUを使うか?を考慮した時間の割り振りが必要になるわけです。この作業が「スケジューリング」です。

Linuxでは、kernel 2.6.22まで「O(1)スケジューラ(オーダワンスケジューラ)」と呼ばれるスケジューラを利用していましたが、Linux 2.6.23以降、Linux 3.10(現在)まで、Completely Fair Scheduler(CFS)がスケジューラとして提供されるようになりました。CFSでは、プロセスに実行優先度をつけ、優先度に応じて時間を割り振ります。実行優先度はいつでも等しいわけではなく、状況に応じて変動します。CFSのもう一つの特徴に、過去に割り当てられた時間が少ないプロセスに対しては優先度を上げる、などのように、「できるだけ公平性を確保する」工夫も施されていることが挙げられます。

縁の下の力持ちとも言えるスケジューラ。チューニングを行う際には重要になることも少なくないので、ぜひ知っておいてください。

○スケジューラーについて参考となる情報
Linuxカーネル開発者が語るスケジューラの最新動向
http://news.mynavi.jp/articles/2008/07/10/lfjs/index.html

openSUSEドキュメント: タスクスケジューラのチューニング
http://opensuse-man-ja.berlios.de/opensuse-html/cha.tuning.taskscheduler.html


ページトップへ