プロセッサーパフォーマンスステート
G0/S0で、プロセッサが動作しているときもCPUクロック周波数や電源電圧の制御がSpeedStepやSpeedShiftで行われる。このときのプロセッサーコアのパフォーマンス状態をグローバルシステムステート(P-State)で表す。
P0が最も高く、最近のCPUでいえば、Turbo周波数での稼働中を示す。Windowsのスロットリング(電源調整)は、このP-Stateの制御をCPU側に任せるものだ。P-Stateは、P0から始まるが、いくつまであるのかは、CPUや制御方法などにより違いがある。
プロセッサーパワーステート
ACPIの電力状態の中で一番わかりにくいのがプロセッサーパワーステート(C-State)だ。まず、C-Stateには、CPUパッケージ(SoC)の「プロセッサーパッケージC-State」と、CPUコアの「プロセッサーC-State」がある。また、これらに、実際のCPUが持っている「プロセッサ固有C-State」が対応する。つまり、3種類のC-Stateがあるため、話がややこしくなる。
C-stateは、原則S0、G0状態かつシステムがアイドルの状態に対応する。つまり、G0/S0でCPUが動いていないときの状態がC-Stateなのである。
なお、C0はCPUが動作している状態に対応する。CPUにやらせることがない場合、Windowsはアイドル状態となる。このときまずC1に入る。C1は、Halt命令を実行し、割り込みがかかるまではCPUが停止したままになる。C2は、C1よりも低消費電力だが、復帰時間が長くなる。C3は、C2よりもさらに低消費電力だが、CPUキャッシュは維持されたままになるが、その一貫性は保証されない。また、C3はC2よりも復帰時間が長くなる。ACPIでのC-Stateの定義を以下の表に示す。
なお、ACPIは、それぞれのC-Stateに対して、復帰に要する時間を情報として提示する。これにより、OS側は、C1以降のどれを使うのかを判断する。たとえば、OSがTimeSliceとして31.2ミリ秒を各スレッドに割り当てている場合、1ミリ秒で処理が終わってしまい、他のスレッドがなければ、残りの時間はアイドル時間となる。この残り時間とC1以上のC-Stateの復帰時間からどのC-Stateを選択すればよいのかが判断できる。
どのC-stateにいても、C0に復帰するまでの時間は違うものの、割り込みが発生すれば、C0に復帰することになるため、ユーザーが入力を始めたなどで、割り込みがかかれば、C0に復帰できるため、予想が外れたとしても危機的な状態に陥る必要はない。
なお、パッケージC-Stateには、C1はない。パッケージC-Stateは、すべてのプロセッサーコアがC1以上になったときにC2以降のどれかになる。CPUの内外を問わず、システム上には、さまざまな周辺デバイスがあり、その電力状態は、D0~D3で表す。CPUパッケージがC1以降のC-Stateに入ることができるかどうかは、プロセッサーC-State以外にデバイスの電力状態であるD-Stateも関連する。
なお、実際のCPUは、「プロセッサ固有C-State」を持ち、C0~C3の4段階以上のC-stateを持つことがほとんどだ。
これらをどう扱うかは、PCメーカーやオペレーティングシステム側の問題となる。また、ACPIは、C0~C3を定義しているが、ファームウェア側で定義することでC4以降のC-stateを扱うことは可能だ。
IvyBridge以降のモバイルCPUでは、C10まであり、より低消費電力化が可能だ。また、ACPIが定義するC1~C3は、あくまでも抽象化されたC-Stateなので、実際には、プロセッサ固有C-Stateを割り当てて使う。
インテルのプログラム最適化のドキュメントには、Sandybridge以降のACPI C2にはプロセッサ固有C-StateのC3を、ACPI-C3には、プロセッサ固有のC6/C7が割り当てられているといった記述がある。なお、インテルプロセッサでは、C7以降は、CPUパッケージの省電力機能となり、コア自体の挙動はC6~C10で同じである。
CPUに依存するが、OSの制御ではなくプロセッサがC-Stateを自動で変更することも可能だ。インテルのSandyBridgeには、こうした機能があり、これを使うと自動で、C3以降の高いプロセッサ固有C-Stateに昇格(高いC-State。より消費電力の低い状態への以降)、降格(低いC-Stateに移行)が可能になる。アイドル時間が長ければ、C-Stateを昇格させて、より高いC-Stateとして消費電力を削減できる。
Windows 10での実装は公開されていないが、ACPIで定義されたC1~C3には対応している。これは、パフォーマンスモニターがC1~C3の統計を表示できることからもわかる。C3より上のC-Stateは、自動制御などを使っているようにみえる。
WindowsでのC-Stateの利用状態は簡単に把握できないが、Linux系OSでは、さまざまなツールにより、C-Stateの利用状況を知ることができる。cpupowerというプログラムで利用可能なC-Stateを表示できる。
また、powertopというプログラムでその利用統計を表示できる。
手元にある第2世代Coreプロセッサで動作しているLinuxマシンでは、C0とC1/C1E/C3/C6/C7の6つのC-Stateが利用可能だが、実際にはC1E、C3、C6、C7が使われ、C2は、パッケージC-Stateのみのようだ。また、滞在時間では、大半がC7になっており、比較的高いC-Stateが有効に使われていることがわかる。
デバイスパワーステート
PCにはCPU以外にさまざまな周辺デバイスが使われていて、システム全体の省電力には、このデバイスの電力制御が欠かせない。たとえば、音を出していないときには、サウンドデバイスをオフにしておくことで、消費電力を削減できるわけだ。ACPIでは、デバイスの電力状態をデバイスパワーステート(D-State)として定義する。
最近のCPUには、内蔵グラフィックスなどさまざまな周辺回路が統合されているため、D-Stateは、前述のパッケージC-Stateとも関係する。
とりあえず、今回ACPIを見たので、次回は具体的にWindows 10の省電力機能を掘り下げていくことにしよう。
この連載の記事
-
第467回
PC
Copilot+ PCのNPUでカメラを処理する「Windows Studio Effects」 その内容や効果は? -
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる - この連載の一覧へ