WIndows10のモダンスタンバイ (Modern Standby) まとめ

近年、身の回りの情報系の人たちはほぼMacを使っているような印象があります。

一方、Windows機の特徴として、計算機性能に対するコスパの良さが挙げられます。
(一部の日系メーカー製や、Microsoft SurfaceVAIO Z、Dell XPSみたいな高級品を除く。)
(あと、”複雑怪奇な”レジストリ設定もWindowsの特徴ですね笑)

それでも、Windowsも日々進化していて、いろいろなところが変わっていったりしています。

今回は、その中でも最近普及してきた「モダンスタンバイ」について、パスワード保護の設定で罠にハマった(別記事参照)ので、自分のためにもまとめてみます。

(注:この記事はただのサーベイ記事です。この分野のプロではないのでご了承ください。)

また、もし誤りや不足している点がありましたらご指摘いただけると幸いです。

モダンスタンバイとは

モダンスタンバイ (Modern Standby) とは、いままでの「ディスプレイの電源を切る (Screen Off) 」と「スリープ (Sleep) 」を段階的に変化させる概念のことを言います。

従来は、コネクテッドスタンバイ (Connected Standby) や Instant ON として実装されていたもののあまり普及していなかったものです。

f:id:elecho:20210307011735p:plain

(出典:モダン スタンバイのためのソフトウェアの準備 | Microsoft Docs

まず、未操作時間の長さや稼働状況によって、段階的に従来の「ディスプレイの電源を切る」と「スリープ」の間で、省電力度合いを切り替えます。

その後、ユーザーが電源オプションで設定した「次の時間が経過後休止状態にする」の時間経過後、もしくはモダンスタンバイでバッテリーをデフォルトでは5%以上消費後に、自動的に「休止状態 (Hibernate) 」に移行します。
(この機能をアダプティブ休止状態 (Adaptive hibernate) と呼びます。)

モダンスタンバイのメリット・デメリット

ここで、モダンスタンバイの特徴をメリット・デメリットに分けて簡単に整理してみます。

メリット

従来の「スリープ」状態と比較したモダンスタンバイの特徴として、

  • 低電力状態におけるバックグラウンドサービスの動作
  • 低電力状態からの復帰の高速化

が挙げられます。*1

バックグラウンドサービス

従来の「スリープ」状態に入るとCPUは停止し、すべての作業状態はRAMメモリ上に保管されます。そのため、すべてのソフトウェアの動作は停止します。

一方、モダンスタンバイの「スリープ相当(アイドルモード、DRIPSモード*2)」状態では、バックグラウンドサービスが動作することが可能となり、通知や音楽再生などを行うことが可能となります。 実装としては、パケットの受信やタイマーなどによって間欠的に短時間アクティブ状態に戻り、プログラムが動作します。*3

ただし、このバックグラウンド動作は、Microsoft Store経由でインストールされた&されうるアプリ(UWPアプリ)のみ利用可能で、インストーラを使用してインストールしたデスクトップアプリでは利用できないようです。 そのため、デスクトップアプリがモダンスタンバイの「スリープ相当」状態で動作することはありません。*4

低電力状態からの復帰の高速化

従来の「スリープ」状態ではCPUやチップセットの電源が落とされているため、「スリープ」からの復帰時に5~10秒ぐらい、もしくはそれ以上かかることもあります。

一方、モダンスタンバイからの復帰は1, 2秒で完了します。そして、「スリープ相当」の状態から復帰する際でも、「ディスプレイの電源を切る」状態からの復帰とほとんど変わらない時間しかかかりません。

そのため、スマホの画面をつけるのと同じような感覚でPCをスリープから復帰させることができるようになります。

(なお、一度モダンスタンバイから「休止状態」に移行してしまうと、復帰に相応の時間がかかるようになってしまいます。)

デメリット

一方、モダンスタンバイのデメリットとして、

  • 電力消費が増える
  • 自動で休止状態に移行するため、無駄にSSD寿命を縮める恐れがある

などが挙げられます。*5

電力消費の増加

モダンスタンバイでは、状況に応じてCPUやチップセットなどの機能が停止されるものの、完全に停止されるわけではありません。

そのため、どうしても従来の「スリープ」状態と比べて消費電力量が増えてしまいます。

SSD寿命の短縮の可能性

(注:)このポイントは、バッテリーを持たないデスクトップPC、および電源に常時接続しているノートPCには関係ありません。スキップして大丈夫です。

前述のとおり、モダンスタンバイ中は電力消費が従来の「スリープ」状態よりも増えることが多いです。 そのため、ユーザーの気づかないうちにバッテリー切れを起こすことがないよう、アダプティブ休止状態 (Adaptive hibernate) という機能でバッテリー残量がデフォルトでは5%以上減ると自動的に休止状態に移行します。
おそらくほとんどのモバイルノートPCで、1日の仕事終了時にPCをスリープさせて電源を抜くと、翌朝にはバッテリーを5%以上消費することになるかと思います。

休止状態になると、PC内のCPUやRAMメモリなどのほとんどのコンポーネントが電源オフとなるため、ほとんど電力を消費しません。
しかし、休止状態に移行する過程で、作業内容が失われないようRAMメモリの内容をすべてストレージ(HDDやSSDなど)に書き出す処理が行われます。
この処理はHDDにもある程度の負担はかけるものの、SSDの場合ははっきりとした注意点が生じます。

SSDには一般的に書込テラバイト寿命 (TBW, Terabytes Written) が定められています。累計総書込量がTBWの目安を超えるとSSDの故障が起こりやすくなります。(TBWを超えないからといって全く故障しないわけではありません。)

例として、メモリを16GB積んでいるPCを一般的なPCやSSDの最大保証期間である5年間、毎日1度休止状態にさせる場合の総書込量を見積もってみます。

その場合、最大で

16(GB) × 365(日) × 5(年) = 29.2 (TB)

の量をSSDに書き込むことになります。

現在のSSDは、安価なものでもTBWが100TBを超えるものがほとんどなので直ちに問題になることはありませんが、それでもこの書き込み量の負荷は覚悟する必要があります。

モダンスタンバイの休止状態移行条件の設定

モダンスタンバイによるSSDの書込量を減らす対策としては、

  • スリープさせても電源に接続したままにする。
  • 休止状態そのものをOFFにする。(後述
  • モダンスタンバイの休止状態移行条件の設定

などが挙げられます。

まず、常に電源(ACアダプター)に接続していれば、休止状態に移行することはありません。

また、「休止状態そのものをOFFにする」操作は、休止状態を普段使わない人にとっては細かな条件を気にしなくてよい手っ取り早い方法になります。
しかし、後述の通りメリット・デメリットがあり、それらをよく認識する必要があります。

最後に、Windowsでは隠れ設定としてモダンスタンバイから休止状態に移行するまでの

  • 最大消費バッテリー割合[%](デフォルト:5 [%])
  • 最低スリープ保持時間[秒](デフォルト:1200 [秒])

が設定できます。
(メーカー製PCの場合、デフォルト値が異なる場合があります。)
(詳細:アダプティブ休止状態の概要 | Microsoft Docs

設定方法としては、コマンドプロンプトもしくはPowerShellで、

最大消費バッテリー割合の場合はStandbyBudgetPercentという設定値を

> powercfg /setdcvalueindex scheme_current sub_presence standbybudgetpercent <パーセント数>

というコマンドで、

最低スリープ保持時間の場合はStandbyReserveTimeという設定値を

> powercfg /setdcvalueindex scheme_current sub_presence standbyreservetime <最低秒数>

というコマンドで変更できます。

なお、Windowsレジストリ値を変更することで、これらの設定は電源オプションでも変更できるようになります。

レジストリの変更は下記記事が詳しいのでご参照ください。

winkit.blog.fc2.com

スリープ状態の定義

上のセクションでは簡単にモダンスタンバイの特徴を説明しました。

このセクションでは、それぞれの状態で各コンポーネントがどのような動作をしているのか解説します。

(この章はただの技術的な仕様の説明なので、読み飛ばしてもらっても大丈夫です。)

従来のスリープ状態

前セクションでは、Windowsの電源オプションの設定に則って省電力状態を「ディスプレイの電源を切る」「スリープ」の2つに分けていますが、実際のシステムのスリープ状態はACPIという規格に沿って、S1, S2, S3, S4に分けられています。それに加えて、S0が通常稼働状態、S5がシャットダウン状態となります。

基本的に、S0からS5に向かって数字が増えるほど省電力度が強くなります。

これらの性質をかんたんにまとめると、下表のようになります。

電源状態 含まれる状態 機能 電力消費 ハードウェア復帰待機時間
(S0) ディスプレイの電源を切る 通常稼働 - -
S1 - CPU・バスクロック停止 2秒以内
S2 - CPU給電停止 2秒以上
S3 スリープ CPU・チップセット給電停止(RAMメモリのみ稼働) 2秒以上
S4 休止状態 CPU・マザーボードチップ・RAMメモリ給電停止 なし 長い
(S5) シャットダウン 電源オフ - -

(出典: システムのスリープ状態 - Windows drivers | Microsoft Docsスリープ (コンピュータ) - Wikipedia

そして、従来の「ディスプレイを切る」状態はS0モードに含まれ、「スリープ」状態はS3モードに相当します。

モダンスタンバイでのスリープ状態

一方、モダンスタンバイの状態はWindows10内で「S0 低電力アイドル」と定義されています。

すなわち、上記のACPI規格の表に当てはめるならば、通常稼働のS0モードに分類されます。

これは、モダンスタンバイでは基本的にCPUやチップセットなどのコンポーネントの動作を完全に停止させることはしないため、S1~S4のいずれの状態にも合致しないためです。

ただし、モダンスタンバイは「低電力アイドル」と名付けられている通り、本当に全コンポーネントが通常稼働しているわけではなく、使用していない機能を停止させています。

この部分的な機能停止を行うためにはハードウェアやファームウェア (UEFI, BIOS) が対応している必要があるため、モダンスタンバイが実現可能な機種は限られます。

実際の動作としては、同じS0状態でもACPIでのプロセッサーパワーステート(Cステート)やインテル系CPU固有のアイドルモード(S0i1など)を切り替えることで消費電力を調整しています。

詳細は、ASCIIさんの以下の記事をご参照ください。

ascii.jp

利用可能スタンバイモードの判別方法

自分が使っているマシンがどのスリープ状態に対応しているかは、コマンドプロンプトもしくはPowerShell

> powercfg /a

と打てば知ることができます。

  • 例:モダンスタンバイ非対応Panasonic Let's note CF-SV7の場合(2018年発売)
    f:id:elecho:20210307203335p:plain

  • 例:モダンスタンバイ対応Dell Inspiron 14 5402の場合(2020年発売) f:id:elecho:20210307231252p:plain

なお、S1モードとS2モードをサポートしている機種は個人的にはあまり多くない印象です。
(というか自分は見たことがありません。)

(重要)モダンスタンバイとS3モードは普通は切り替えできない!!!

これはとても重要なことなのですが、モダンスタンバイを使うか従来のS3スリープを使うかユーザーが簡単に設定することはできません。

一応Windows内でスリープ中にWiFiに接続するかどうかだけは設定できる場合もあります。

スリープ中のWiFi接続設定

(出典: 価格.com - 『有効時に出る、無効の時は何もない』Dell Inspiron 14 5000 プレミアム Ryzen 5 4500U・8GBメモリ・256GB SSD搭載モデル カタログ君さん のクチコミ掲示板投稿画像・写真「モダンスタンバイs0をs3に変えたい」[3482327]

ただ、モダンスタンバイ(S0 低電力アイドル)/S3スリープの切り替えそのものはWindows上では設定できません。

例えモダンスタンバイのバックグラウンド通知サービスやスリープ高速復帰が不要だとしてもです。

ASCIIの記事でも、

「Modern Standbyを利用/解除したい」といった話を見かけるが、Modern Standbyは、Windowsのインストール時にファームウェアUEFI、まだBIOSと呼ぶ人もいるが……)からの通知によって決定されるもので、原則メーカーのインストールオプションであり、購入後にModern Standbyを有効、無効に切り替えることはかなり困難で一般ユーザーには不可能といってもいい。

と書いてあります。

(おそらく、OSとハードウェア・ファームウェアの連携上やむを得なかったのだと推測されますが、結構不便な点の一つです。)

なお、一部の機種ではUEFIでモダンスタンバイ(S0 低電力アイドル)を利用するかS3スリープ状態を利用するか選択できます。

その際、Microsoft公式としては

Q: Can I switch between S3 and Modern Standby by changing a setting in the BIOS? A: No, switching the power model is not supported in Windows without a complete OS re-install. Modern Standby FAQs | Microsoft Docs

とのことで、UEFIの設定を変更してもWindowsの再インストールが必要なようですが、どうやらUEFIの設定を変更するだけでモダンスタンバイとS3スリープを切り替えられる場合もあるようです。 cherry-box.net

ただ、それでもUEFIでスリープ状態の設定ができない方が普通です。

現在把握してる機種ごとのモダンスタンバイ/S3スリープの切り替えの可否の事例は下記のとおりです。

<切り替え可能>(OS再インストールが必要かどうかは不明です。)

<切り替え不可能>

Windows内の電源オプションの設定との関係

前述のとおり、モダンスタンバイでは各コンポーネントを段階的に低電力状態に移行します。

しかし、実はモダンスタンバイ対応機種でも、Windowsの「コントロールパネル→ハードウェアとサウンド→電源オプション→プラン設定の編集」で「ディスプレイの電源を切るまでの時間」や「コンピューターをスリープ状態にするまでの時間」を設定できます。

f:id:elecho:20210308130221p:plain

これは、「スリープ」ならS3スリープ状態に切り替える、みたいなことをしているわけではなく、これらの状態相当の低電力状態にしている、ということを意味します。
(モダンスタンバイの参照)

このように、モダンスタンバイそのものの有効化/無効化の設定はできないものの、低電力状態への移行のタイミングは一応設定できるようになっています。

Sleepstudy Report の表示方法

なお、パソコンの前に座っているだけでは「ディスプレイの電源を切る」相当の状態と「スリープ」相当の状態の判別は意外とつきにくいです。 (猛烈にファンが回っている場合を除く。)

しかし、過去の低電力状態は Sleepstudy Report 機能を用いることで調べることができます。

Sleepstudy Reportは、コマンドプロンプトもしくはPowerShell

> powercfg /sleepstudy

とコマンドを入力して実行することで、3日分の低電力状態遷移のレポートが生成されます。

その時、

スリープ検査レポートがファイル パス  C:\WINDOWS\system32\sleepstudy-report.html  に保存されました。

のような文言が出力されるので、そのファイルパスC:\WINDOWS\system32\sleepstudy-report.htmlを適当なブラウザに打ち込めばレポートを見ることができます。

f:id:elecho:20210308124334p:plain

f:id:elecho:20210308124349p:plain

このうち、二枚目の画像の"STATE"列を見ることで、過去のある時のPCの低電力状態を確認することができます。

なお、STATEの英語と日本語の対応関係は

英語 日本語
Active 通常稼働
Screen Off ディスプレイの電源を切る
Sleep スリープ
Hibernate 休止状態

です。

このように、どの時刻にどの状態に移行したかをたどることで、設定の妥当性を検証することができます。

(おまけ)休止状態の無効化

前述の通り、「スリープ」状態でバッテリー消費量が5%を超えると、自動的に休止状態に入ります。

f:id:elecho:20210308222457p:plain

このケースでは、「スリープ (Sleep)」状態でおよそ8時間経過後に「休止状態 (Hibernate)」状態に移行しています。

ただ、モダンスタンバイの「スリープ (Sleep)」状態でもWindows Updateは動作して更新プログラムのダウンロードなどが可能という話もあります。

Windows Update は、常に最も深いアイドル状態から SoC をウェイクアップして、更新プログラムをスキャンできます。 また、デバイスの電源に応じて、SoC をスリープ解除して、更新プログラムをダウンロードしてインストールし、デバイスを再起動することもできます。 モダン スタンバイのスリープ解除に関する情報 | Microsoft Docs

そのため、「スリープ (Sleep)」状態での動作状況に応じて「休止状態」に入るまでの時間は変動します。

さらに、実は「ディスプレイの電源を切る (Screen Off)」状態からでもバッテリー消費量が5%を超えると「スリープ」状態を経ずに「休止状態」に入ります。

f:id:elecho:20210308223245p:plain

この場合、少しPCを放置していただけですぐに休止状態に入ってしまうことになります。 すなわち、何度も休止状態に入ることでSSDの寿命を縮めるだけでなく、起動時間の長期化につながってしまいます。

このような休止状態移行を防ぐためには常にPCを電源に接続していればいいのですが、使用状況によってはそうできない場合もあるでしょう。

その際に解決策の候補となるのは、休止状態の無効化です。

休止状態の無効化は、管理者として実行されたコマンドプロンプトPowerShellから可能です。

コマンドプロンプトを用いる場合の具体的な手順は下記の通りです。

  1. 管理者としてコマンドプロンプトを起動する。
    タスクバーの「検索」欄に「cmd」と入力し、アプリ情報から「管理者として実行する」をクリックする。
    f:id:elecho:20210308224356p:plain

  2. コマンドpowercfg hibernate offを入力する。
    f:id:elecho:20210308231105p:plain

なお、「休止状態」の無効化に際して以下の点にご注意ください。

  • 電源オプションでも似たような設定がありますが、こちらは電源メニューに表示するかどうかの設定をするだけで、休止状態の有効・無効自体の設定はできませんf:id:elecho:20210308231355p:plain
  • 休止状態が無効になったかどうかは以下のいずれかの方法で確認できます。
    • powercfg /aとコマンドを入力し、有効なスリープ状態に「休止状態」が含まれていないことを確認する。 f:id:elecho:20210308232137p:plain
    • 電源オプションで「休止状態」を設定できないことを確認する。 f:id:elecho:20210308232300p:plain
  • 休止状態を再度有効化したい場合は、管理者モードでpowercfg hibernate onとコマンドを実行します。

このように休止状態を無効化すると、バッテリー低下が5%を超えても「スリープ」状態を続けることができます。

f:id:elecho:20210308232912p:plain

ただし、「休止状態」を無効化する際に、下記のようなデメリットがあります。

  1. バッテリー切れ時の作業内容喪失
    バッテリー切れを起こすと、作業内容は消えます。普通Windowsはバッテリーの残量がわずかになると自動的に休止状態に入ったりしますが、休止状態の機能そのものを停止しているためそのような挙動は期待できません。
    そのため、バッテリーがヘタっていたり長期間使わないような場合は、都度休止状態をONにしたり、電源に接続したままにするよう注意する必要があります。

  2. バッテリー寿命の悪化
    休止状態はSSDの書込寿命に影響する一方、「スリープ」状態で電力を消費し続けるとバッテリー寿命に影響します。
    どちらを優先するかはその人の使い方やポリシーによると思います。
    (個人的には、SSDのデータが吹っ飛ぶほうが怖く、バッテリーは劣化したら適当に通販で新品のバッテリー買ってきて換装すればいいと思っている派なので、休止状態の無効化を優先しています。)

  3. Windowsの「高速スタートアップ」機能が使えなくなる
    Windowsの高速スタートアップ機能は、接続されているデバイス情報などを記録しておくことでシャットダウン状態からの起動時間を短縮するものです。このデバイス情報は休止状態の記録ファイルと同じファイルに記録されるため、休止状態をオフにすると、高速スタートアップ機能も使えなくなります。
    現在のSSD搭載PCでは大きな違いはないと思いますが、もし休止状態を無効化した後ショットダウン状態からの起動に許容できない遅延がある場合は、休止状態を有効にしたほうが良いかもしれません。

まとめ

モダンスタンバイは、スリープ状態でのバックグラウンドサービスの動作や復帰の高速化など、様々な点で便利になっています。

一方、電力消費の増加やSSDの書き込み増加問題(、別記事で紹介するパスワード要求タイミングの変化)など、デメリットはいくつかあります。

特に、バッテリーを基準値(デフォルトでは5%)以上消費した際のモダンスタンバイから休止状態への自動移行の挙動は、SSD書込みの観点から注意が必要です。

なんといっても、ユーザーが簡単にモダンスタンバイの有効/無効を切り替えることはできません!

そのため、モダンスタンバイの特徴を理解して付き合いましょう。

以上、Windows10のモダンスタンバイのサーベイ&検証でした。

参考文献