「スロットリング」ではCPUの電力管理をOSではなく、CPU任せにする

文●塩田紳二 編集● ASCII編集部

2019年09月22日 10時00分

今回は前回の続きで、Windows 10の省電力機能を具体的に見ていく。今回のテーマは「スロットリング」である。マイクロソフトによれば、このスロットリングを使うことで、多くの場合CPUの消費電力を11%ほど削減することが可能になるという。

第6世代Coreシリーズ以降で使える「スロットリング」
CPU性能の制御をWindowsではなく、CPUがする

スロットリングは、RS3(Windows 10 Ver.1709)から利用できるようになった機能だ。スロットリングとは、簡単に言えば、これまでWindowsが制御していたプロセッサのパフォーマンス状態をCPUの電力管理機能に完全に任せてしまうことだ。

日本語版Windowsでは「電源調整」と呼ばれる。スロットリングは、アプリケーションの負荷に応じてCPU性能を制御する。RS3以降で第6世代以降のインテルCoreプロセッサを搭載していれば利用することができる。条件を満たしたマシンでは、バッテリ駆動状態で、電源モードが「最も高いパフォーマンス」でなければタスクマネージャーの詳細タブで「電源調整」を表示させることで、アプリケーションごとにスロットリングが「有効」か「無効」かを判定できる。

第6世代以降Coreシリーズ以降を搭載したマシンはバッテリ駆動時に「スロットリング」(電源調整)が有効になる

なお、条件を満たさない場合には、電源調整の欄はすべて無効のままである(タスクマネージャーで電源調整の欄自体はどんなマシンでも表示させることは可能)。

また、スロットリングは、バッテリの動作モード(タスクバーのバッテリアイコンのフライアウトから設定)が「高パフォーマンス」以下で有効になり、「最大パフォーマンス」では無効になる。スロットリングは、ハードウェアが負荷に応じて実行性能を制御するが、最大パフォーマンスに達するまでは、多少のタイムラグが生じる。このため、常に高い性能を維持させたい場合には、スロットリングを無効にする必要がある。

ただし、最近のCPUでは、最大パフォーマンス(最大クロック周波数)は、パッケージの温度などを監視しながら利用されるため、瞬間的(とはいってもプログラムから見ると十分長い時間)でしか利用できず、いつでも継続的に利用できるものではない。それでも最大パフォーマンスに達するまでのわずかな時間(これもプログラムから見れば十分長い時間)が、ソフトウェアの処理性能に影響を与え、たとえば、リアルタイム性の高いソフトウェアや負荷の高い処理を継続してするような場合には、オフにすることで、最大性能を利用することが可能になる。

また、スロットリングは、アプリごとに設定が可能だ。その設定は、「設定」→「システム」→「バッテリー」→「バッテリー残量に影響を及ぼしているアプリを表示する」を開き、アプリを選択して、「このアプリをバックグラウンドで実行できるかどうかをWindowsで決定する」をオフにすると、「バックグラウンドのときはアプリの作業負荷を減らす」というチェックボックスが表示されるので、これをオフにすることで、該当アプリのスロットリングを無効とすることができる。

ただし、「設定」→「システム」に「バッテリー」があるのはバッテリ駆動のシステムのみである。また、基本的に、この設定は、バッテリ消費を大きくするため、基本的には設定する必要はない。

また、スロットリングは、グループポリシーエディタ(コンピューターポリシー→コンピューターの構成→管理用テンプレート→システム→電源の管理→電源調整設定→電源調整をオフにする)やレジストリ設定(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerThrottlingのDWORD値PowerThrottlingOffを設定。存在しないキー、名前は作る)で強制的にオフにすることもできる。

そもそもスロットリングとは何?

ACPIでは、スロットリングをThrottling Stateとして定義しており、G0/C0 Stateで、P-Stateとは別の状態としている。P-Stateは、OS(Windows)側が、負荷などに応じて設定するが、Throttlingは、ハードウェア(CPU)側が処理性能(P-Stateに相当)を自動で切り替える。また、スロットリング状態への移行は、OS側がアプリごとに判断して決める。

ACPIでは、スロットリングをP-Stateとは別のThrottling-Stateであると定義する。ともにC0-State/G0-Stateとなる

ACPIでスロットリングが導入されたのは、マルチコアプロセッサやSMTの普及により、電力管理が複雑になり、ソフトウェア側の対応が難しくなってきたからだ。CPUの電力管理は、プロセッサハードウェアにより固有の条件があり、電力やパフォーマンス調整を個別のコア単独でできない場合がある。

たとえば、SMTを構成する2つの論理コアは、同一のハードウェアコアであるため、両方でスレッドを実行している場合に異なるP-Stateを割り当てることができない、あるいは片方だけ電源を落とせないといった状態が発生する。また、パッケージのC-Stateは、コア全部のC-Stateとも関係するため、コアのC-Stateと無関係に制御することも困難だ。このため、パフォーマンス制御をハードウェア側に委譲するためのThrottling Stateが導入された。

インテルCPUでのスロットリングの実装

Windows 10のスロットリングには、インテルがSkylake(第六世代Intel Coreプロセッサ)に搭載したSpeed Shiftを使う。現状、スロットリングは、Speed Shiftに対応したCPUでのみ利用できる。Skylake以前のプロセッサには、Speed ShiftではなくEnhanced SpeedStep Technology(EIST)と呼ばれる機能が搭載されていた。

EISTでは、P1~PnまでをWindowsで制御し、ターボブーストがP0を制御していた。ターボブーストでは、他のコアやGPUの稼働状態により選択できる周波数に違いが出るからだ。これに対してSpeed Shiftでは、ターボ状態を含めてパフォーマンス設定をCPU側でする。これがスロットリングになる。なお、スロットリングが無効な状態では、WindowsがP1~Pnの設定をする

EISTは、Pentium 4(Prescott)から搭載されている古い機能であり、最近のCPUでは、パッケージの温度を監視しながら最大周波数動作を制御するIntel Turbo Boost Technology(ターボブースト)と組みあわせてクロックを制御する。EISTの場合、P0-Stateとなる最大周波数への移行は、ターボブーストで、P1以下のP-Stateの制御をEIST経由でWindowsがしていた。このとき、P0-Stateに移行させるためには、ソフトウェア制御でP1ステートに持っていく必要があった。

これに対して、Speed Shiftは、ターボブーストの最大パフォーマンスから、最低クロック周波数までをすべて管理できるように作られた。スロットリングは、この機能を利用し、稼働中のコアに対して、P-StateからThrottling-Stateに移行させ、そのパフォーマンス設定をCPU側にすべて任せる。

CPUによるパフォーマンス制御のメリットは、OS(ソフトウェア)からの制御に比べて高速に動作できる点だ。ソフトウェアによるパフォーマンスの設定では、負荷の検出やクロック周波数/電源電圧の設定にソフトウェアコードが動作するため、最低でも数ミリ秒程度の時間が必要になる。

このため、EISTとターボブーストの場合、EIST側の最大周波数(P1-State)に達するまで100ミリ秒程度の時間(CPU世代やプロセッサナンバーによる違いはある)が必要で、そのあと、ターボブーストが動作して最大クロックに達する。これに対してCPUによる制御ではプログラムを動作させる必要がなく、数ミリ秒程度で制御が可能だ。インテルの資料によれば、10数~30数ミリ秒程度の時間(同)で最大クロック周波数に達することができるという。このため、負荷の高いソフトウェアの実行でも、短時間で最大パフォーマンスに達することができる。

もう1つのメリットは、CPUパッケージ全体を見た省電力化が可能な点だ。

コアの消費電力はパフォーマンス(クロック周波数。赤のグラフ)が高ければ大きくなる。1つのタスクについて見ると、処理時間が短いほど、パッケージ自体の消費電力(緑のグラフ)は小さくなる。両者を合わせたのが青いグラフである。このため、最も電力効率が良いパフォーマンス設定は、青いグラフの底にあたる部分になる

CPUパッケージ内には、さまざまな周辺回路が統合されており、オンになっている時間が長いほど電力を消費する。これに対して、コアの消費電力は性能に比例して高くなる。1つのタスクに関して見ると、処理時間が短いほどパッケージ全体の消費電力は小さくなるが、そのためには高いパフォーマンスでタスクを実行する必要がある。

このため、パッケージ全体では、1つのタスクを処理するのに最も低い消費電力となる点が最大パフォーマンスと最低パフォーマンスのどこかに存在することになる。CPU側のハードウェアで行なうCPU制御であれば、この点を見付けるのは比較的容易だが、ソフトウェアでするのはかなり難しい。また、その処理プログラムのためにコアが動いてしまうと、最適点はズレてしまう。このため、最も電力効率の良いパフォーマンス設定はハードウェア側でないと選択が不可能になる。

バッテリで動作するWindowsマシンの場合、スロットリングに関しては、ユーザーは特に何かをする必要はない。ただ、消費電力を下げるという点からは電源モードを「高パフォーマンス」以下に設定しておけば、スロットリングが有効になる。さて、次回は、同じく電源管理を利用して実現されている「モダンスタンバイ」について解説し、一連の電源管理解説のまとめとしたい。

■関連記事