Windowsの電力管理において
ハードウェアを制御するのに用いるACPI
Windows 10の電力管理の大きな機能としては「スロットリング」(電力管理)と「モダンスタンバイ」がある。
スロットリングは、CPUの電力管理機能を使い、稼働中のプログラムに対して最適なCPU性能(クロック周波数)を決定することで、マイクロソフトによれば、非対応の場合に比べて駆動時間にに11%程度の違いが生じるという。
モダンスタンバイとは、PCの電力をオフにせず、消費電力が少ない状態としておき、画面がオフ、あるいはディスプレイを「閉じて」いる間にも、メール受信やVoIP(Skypeなど)の着信を可能にするもの。これらの動作には、ハードウェアとWindowsの連携が不可欠だが、それを支えるのがACPI(Advanced Configuration and Power Interface)である。
その名のとおり、ACPIは、システムが持つデバイスの設定(コンフィギュレーション)と電力管理のためのもの。簡単にいうとACPIは、Windowsとハードウェア(およびファームウェア)との間に入るインターフェースである。
電力管理は、Windowsの機能だが、実際にハードウェアを制御するのにACPIを使う。Windowsは、APCIでCPUやマザーボード、周辺回路の電力制御を行ない、また、ハードウェア側の電力制御機能に対して、電源状態(バッテリ駆動なのかどうか)、ユーザーの設定したポリシー(Windows 10ならば電源プランと電源モード)を情報として提供する。
ACPIで扱われる状態とは
ACPIは電力制御のために、プラットフォームやCPUパッケージ、CPUコアなどの電力状態やスリープ状態などを「抽象化」して表現する。
ACPIは、もともとはマイクロソフトとインテル(および東芝が参画)が作ったものだが、現在では、LinuxなどのWindows以外のOSでも使われ、また、ARMプロセッサを利用したコンピューターシステムなどにも採用されている。というのも、途中でIA-64が対象になり、このときにWindows以外のOSをサポートせざるを得なかったからである。
こうした背景があるため、特定のCPUに依存しない抽象的な表現でプロセッサーやシステムの状態を扱う。このACPIの電力状態(ステート)は、ファームウェアやOSのプロセッサドライバーなどで、具体的なハードウェアの持つ省電力機能に対応する。
なお、こうした電力関係の用語は、Windowsの場合、ACPIに準拠した形となるが、インテルなどのプロセッサメーカーでは、別の表現になることもある。もっとも元々の考えが同じであるため、少々複雑な状態となるが、似たような用語でも、ACPIの文脈では、常に抽象化した用語であり、インテルプロセッサなど具体的なハードウェアの文脈では、それぞれの製品の用語であることを意識するとわかりやすい。ACPIの電力管理では、以下のような状態を扱う。
・グローバルシステムステート(Global System State、G-State)
・プロセッサーパフォーマンスステート(Processor performance states、P-State)
・プロセッサーパワーステート(Processor Power State、C-State)
・スリープステート(Processor performance states、S-State)
・デバイスパワーステート(Device Power State、D-State)
これらの関係は、以下の図のようになっており、G0とS0が一致し、プログラムを実行している間はC0で、P0~Pn(最大値はシステムにより異なる)の間で変化し、アイドルになるとC1~C3(またはそれ以降)になる。G1は、S3/S4に対応し、G2がS5に対応する。なお、S2は定義されてはいるものの、実際に利用しているシステムはないようだ。
グローバルシステムステート
ACPIがPCなどのシステム全体の電力状態を示すのが「グローバルシステムステート」(G-State)である。G-Stateには、G0~G3の4段階ある。
あとの状態の説明でも同じだが、どのステートでも0は「稼働状態」を表す。いわゆるPCが動いている状態はG0となる。G1は、スリープ状態であり、G2とG3は電源オフ状態を示す。その違いは、G3が機械的スイッチによるオフで、システム内のデバイスやソフトウェアからのオンが不可能な状態となる。これに対してG2は、Windowsで言えばスタートメニューの電源ボタンからのオフであり、ハードウェアやソフトウェアからオンが可能になる状態だ。
G-Stateは、システム全体、PCそのものの電力状態を表し、CPUコアやパッケージ、周辺回路などの状態とは独立した状態ではあるが、たとえば、G3状態にあるときに動作しているハードウェアは存在できないため、ある程度の関係性を持つ。
スリープステート
ACPIの電力管理で頻繁に聞くステートの1つがスリープステート(S-State)だ。これは、S0~S5まであり、S0が非スリープ状態(稼働状態)であり、これはG0と一致する。
G1のときにはS1~S4のどれかになる。S5は、スリープではなく電源オフの状態を表しGステートではG2のときにあたる。S-Stateは、スリープ状態の区別であるとともに、システムが対応可能なスリープ状態の仕様を表す。S0の対応は必須だが、S1~S4への対応はハードウェアメーカーやオペレーティングシステムのサポート次第である。
なお、Windows 10のモダンスタンバイ(Windows 8までのConnected Standby)は、「S0 Low Power Idle」という特別なS0ステートが対応する。逆に言えば、システムのACPIがS0 Low Power IdleをサポートしているときだけWindowsはモダンスタンバイ構成とすることができる。
インテル系CPUには、S0i1、S0i3などの特別なアイドルモードがある。これは後述のCステートなどと組みあわせて、短時間で復帰を可能にする特殊な状態である。実際には、稼働状態とスリープ状態の中間的な状態にある。このとき、CPUはほとんど止まった状態になり、ネットワーク処理(VoIPの着信など)やサウンド処理(スリープ中の音声による起動)などはデバイスが「オフロード」機能を使って実行する。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ