ここに来てようやく
「Modern Stanby」に対応したPCが増えている
2019年頃から、「Modern Standby」に対応するPCが増えてきた。Modern Standbyとは、基本的に常に電源オンで、スリープ時は「S0低電力アイドル」を用いるものだ。
以前のPC(非Modern Standby)は、スリープにACPIのS3を利用している。S3は、メモリーとCPUの状態維持に必要な最小限の電源状態してPCを停止させている。これに対して「S0低電力アイドル」は、PCの多くの部分の電力は切るものの、CPUは消費電力の低いアイドル状態として完全には停止させない。ネットワークからのパケット受信などで割り込みが起こると、一時的に復帰してこれを処理できる。大半の時間は低電力状態に留まるため、バッテリー消費が抑えられ、従来型のスリープとは見た目は変わらない。
このModern StandbyをWindowsで実現するのには、長い時間がかかった。前身である「Connected Standby(Instant ON)」が初めて登場したのはWindows 8のとき。しかし、基本的な構想は、Windows Vistaの開発段階ですでにあった。しかし、Vistaは開発が失敗してWindows Serverをベースとしたため、電力消費に関しては、改善がほとんどできなかった。それを挽回したのがWindows 8だったわけだ。
しかし、Connected Standbyは、行儀が悪いデバイスドライバーなどにより、すぐに消費電力が増えて、スリープさせても、どんどんバッテリーを減らしてしまっていた。購入直後のPCではちゃんと動作したとしても、デバイスの接続やアプリのインストールで、すぐに状態が壊れてしまうのだ。
そこでWindows 10では、問題を起こしそうなドライバーを押さえ込む工夫が加えられた。たとえば、ネットワークドライバーの変更などである。ネットワークドライバーは、TCP/IPをWindowsのドライバー内で処理する関係から、特殊な構造になっていて、Windowsの電力管理を有効にしにくい構造になっていた。このあたりの改良については、NetAdapter Cx(NetAdapter Class extensions for WDF)として以前解説してる(「DOS時代から使われてきたネットワークドライバーの改良がついに進む」)。
こうした長く地道な改良の結果、19H1(Windows10 Ver.1903)あたりでようやくModern Standbyがまともに動くようになってきた。メーカーの採用も増え、最近では、多くの64bit CPUを搭載するPCがModern Standby対応になっている(Atom系CPUを使う32bit Windows 10マシンは当初からModern Standby対応)。
なお、いまだにインターネット上では、「Modern Standbyを利用/解除したい」といった話を見かけるが、Modern Standbyは、Windowsのインストール時にファームウェア(UEFI、まだBIOSと呼ぶ人もいるが……)からの通知によって決定されるもので、原則メーカーのインストールオプションであり、購入後にModern Standbyを有効、無効に切り替えることはかなり困難で一般ユーザーには不可能といってもいい。ちなみにMicrosoftのドキュメントにも以下の記述がある。
Q: Can I switch between S3 and Modern Standby by changing a setting in the BIOS?(BIOS設定を変更してS3からモダンスタンバイに変更できますか?)
A: No, switching the power model is not supported in Windows without a complete OS re-install.(いいえ、WindowsはOSの再インストールなしに電力モデルを変更することをサポートしていません。)
https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-faqs
Modern Standby対応機種では、システムトレー(通知領域、タスクバーの右側)にあるバッテリーアイコンのフライアウトに動作モードを指定するスライダーがある。これは「Performance Power Slider」と呼ばれている。Microsoftの日本語ドキュメントには、「[パフォーマンス] スライダー」「パフォーマンスの電源スライダー」「電源スライダー」と表記されている。ここでは、表記が最も簡単な「電源スライダー」という名称を利用することにする。前置きが長くなったが、では、この電源スライダー、一体何をどうしているのだろうか?
電源スライダーの動作をPowercfgで調べた
Windowsの電力管理は、さまざまなパラメーターで設定されている。ただ、個別にオン/オフするのは大変なので、すべての設定項目をスキーマと呼ばれるデータ形式でまとめ、複数のスキーマを作り、これを「電力プラン」呼んで、設定をまとめてできるようにしている。
Modern Standby以前のS3スリープの時代は、複数の電力プランを作り、これを切り替えてバッテリー消費量削減を重視するか、性能を重視するかを決めていた。これに対して、Modern Standbyでは、「バランス」プランか、そこから派生したメーカー独自の電源プランだけしかない。ほかのプランも作ることは一応可能だが、推奨されていない。
電力スライダーは、これとは別のもので、切り替えたからといって電力プランが変更されるわけではない。Powercfg.exeコマンドにある隠しオプション「/queryh」を使い、電力スライダーを切り替えて、そのときのスキーマを調べてみた。Powercfg.exeの隠し項目については、過去記事を参照してほしい(「Windowsマシンの電源関係を制御する「Powercfg」コマンドを極める」)。
その結果は、電源スライダーを変えても、電力プランは反抗されないし、スキーマの内容も同一のままだった。では、何も変わらないのかというとそうではない。たとえば、バッテリー動作しているときに電力スライダーを右端の「最も高いパフォーマンス」にすると、スロットリング(電力調整)がなされなくなる。高パフォーマンスなど他の電源スライダー位置ではスロットリングがなされるが、AC動作中は常に行なわれない。スロットリングに関しては以下の記事を参照されたい(「スロットリング」ではCPUの電力管理をOSではなく、CPU任せにする)。
スロットリングの状態は、タスクマネージャーの「詳細タブ」で「電力調整」列を表示させると見ることができる。Modern Standbyのマシンでは、電源スライダーを「高パフォーマンス」にすると、対応アプリは「電力調整」が「有効」になるが、「最も高いパフォーマンス」を選択すると、すべてのアプリで「無効」になる。
また、電源スライダーを「バッテリー節約機能」にすると、画面が暗くなり、一部のアプリケーション(たとえば、OneDrive)がバックグラウンド動作に制限がかかったことを通知することがある。
つまり、電源スライダーを変えることで、Windows 10の電力管理には、変化が起こっているわけだが、そのパラメーターを示す電源プランには、何も変化がない。
この連載の記事
-
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 -
第447回
PC
この秋登場のWindows 11の新バージョン、Ver.24H2の状況を見る -
第446回
PC
Windows 11のフォトアプリがUWPからWin32アプリになったことで今更わかるUWPの問題点 -
第445回
PC
次期Windows 11ではAndroidのファイルをエクスプローラーからアクセス可能になる -
第444回
PC
外部ファイルをExcelに読み込む際の作業を効率化するPower Queryの活用 -
第443回
PC
Windows Terminalで採用されたCascadia Codeフォントを使うとプログラムを書くとき断然見やすい -
第442回
PC
Copilot+ PCで実現されるローカル推論で「対クラウド企業」を指向するMicrosoft -
第441回
PC
WSL以前から40年以上続く、Windows(Microsoft)とUNIXとの関わり - この連載の一覧へ