このページの本文へ

前へ 1 2 次へ

Windows Info 第190回

Windows 10の電力管理を支えるACPIを見る

2019年09月15日 10時00分更新

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

  • この記事をはてなブックマークに追加
  • 本文印刷

プロセッサーパフォーマンスステート

 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を表示できる。

Linuxのcpupowerコマンドで利用しているプロセッサ固有C-Stateを見ることができる

 また、powertopというプログラムでその利用統計を表示できる。

Linuxのpowertopコマンドでは、C-Stateの統計情報を表示できる

 手元にある第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の省電力機能を掘り下げていくことにしよう。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン