実はCPUの消費電力と
関係が深いスケジューリング
スレッドが起動されるタイミングによっては、スケジューリングの振る舞いは変わってくる。例えば、10個のスレッドがほぼ同時に起動するのと、起動時間にある程度の差を付けて起動するのでは、瞬間的な負荷は違ってくるし、ほかのスレッドの実行順序や継続時間などにも影響が出る。
そのためスケジューリングは、ほんのわずかな違いが大きな変動につながるような動作をしているように見える。ある程度までは汎用的なスケジューリングアルゴリズムを考えることで、効率的な動作が可能である。だが実際にパソコンを動作させていると、「時と場合によって違う」部分もある。例えばGUIに関わるスレッドに多くの時間を割り当てるというのは、対処療法的な方法とも言える。しかし、それもWindowsが長い間、段階的にチューニングされてきた結果でもある。
スケジューリングは消費電力にも大きく影響している。人間が操作するコンピューターは、アイドル状態である時間の比率が高い。ここでいかに消費電力を小さくするかで、全体の消費電力が違ってくる。プロセッサーの性能がピークにあるときの消費電力を小さくするのは難しい。ハードウェアの特性として、クロック周波数を高くすればするほど、電源電圧を大きくする必要がある。オーバークロックで電圧を操作する必要があるのはそのためだ。しかし電圧やクロック周波数を高くすることは、消費電力の増大につながる。
一方でピーク性能時の消費電力が同程度なら、動作速度が速ければ速いほどいい。なぜなら処理速度が速いほうが、消費電力の大きなピーク性能動作の時間が短くなるので、より長い間アイドル状態でいられるからだ。
また、マルチコアCPUやマルチプロセッサー環境では、スケジューリングはどのコアでスレッドを実行するかにも関わる。処理性能だけを考えたら、より多くのコアにスレッドを分散させたほうが有利だが、プロセッサー構成を考慮することで、動作しているプロセッサーの数を減らすことができ、消費電力を減らすことができるのだ(図2)。
また比較的CPU負荷の軽いスレッドなら、1つのコアに複数のスレッドを割り当てても処理時間に影響が出ることはない。そのような場合は、消費電力を減らせるコアの割り当て方がある(図3)。
ハイパー・スレッディングのような「SMT」(同期マルチスレッディング)の場合、論理コアは別だが物理コアとしては同一となる組み合わせがある。その組み合わせへのスレッドの割り当て方によっても、消費電力が違ってくる(図4)。例えば、ある論理コアが動いているなら、同一物理コアにある別の論理コアがアイドル状態でも、消費電力は減らない。
そこでWindowsには「Core Parking」と呼ばれる機能がある。スレッド数に比べてコア数が多い場合には、CPU数や物理コアと論理コアの関係を考慮して、スレッドの実行を特定のCPU(または物理コア)に“集める”わけだ。Windowsのスケジューリングアルゴリズムもまた、ハードウェアの進化や消費電力のトレンドに合わせて、進化を求められていることがご理解いただけただろうか。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ