コンピュータ上では、複数のアプリケーションを同時に動作させることができます。これは、OS(Operating System)が備える「スケジューリング」機能が実現しています。スケジューリングは、CPUリソースの管理と割り当てをつかさどるカーネルの機能です。CPUリソースの割り当ての統計情報であるCPU使用率は、システム性能を示す代表的な指標の1つです。
スケジューリングは、OS上で動作するプログラムに、CPUコアを割り当てます。スケジューリング機能を担うOSのモジュールを「スケジューラー」と呼びます。CPUコアの割り当てがスケジューラーによってどのように動作するのかを詳しく見てみましょう。
プログラムが動作するとき、カーネルはプログラムをストレージから読み込んでメモリー上に配置します。こうしてコンピュータが実行可能な状態にしたものを「プロセス」と呼びます。そして、プロセスの中で実行する命令の流れを「スレッド」と呼びます。以下では、CPUのスレッドとの混同を防ぐために、プロセスとスレッドを合わせて「タスク」と表現します。
OSのスケジューリング機能は、CPUのどのコアでタスクを動かすかを判断します。また、CPUのコア数を上回るタスクが動作しようとするときは、どのタスクを優先的に実行するかを判断してコアに割り当てます。これらの判断は、タスクに指定された優先度、各タスクのCPU割り当て実績、各コアで割り当てを待つタスクの数などに基づきます。
優先順位と負荷分散を管理
タスクに指定された優先度は、複数のタスクが一つのコアを奪い合うとき、どのタスクを先に実行するか決めるのに用いられます。異常事態の検知など、遅れが問題となる処理は優先度を高く設定します。一方、バックグラウンドで実行するメンテナンス処理などは、優先度を低く設定します。
CPU割り当て実績により、スケジューラーは、タスクにCPU時間を公平に割り当てます。スケジューラーはまた、複数コア間の負荷を分散し、実行するタスクがないコアを省電力モードに移行させます。
省電力モードはコスト削減に効果のある機能ですが、レスポンス性能に厳しい要求のあるシステムでは注意が必要です。特にレベルの高い省電力モードになったCPUは、実行状態に復帰するのに時間がかかります。そのため、例えばパケットの受信に対する反応が遅くなります。