スタートアップとシャットダウンの優れたエクスペリエンスを提供する

このセクションでは、高速スタートアップの概要と、顧客に最適なオン/オフ エクスペリエンスを提供するためのパートナー向け推奨事項について説明します。

PC は 1 日に何度もオンまたはオフにすることがあります。 デバイスの使用パターンやバッテリー残量によっては、PC がシャットダウン、スリープ、または休止状態になる場合があります。 システムの起動は、ユーザーが自分のデバイスで行う最初のエクスペリエンスであり、そのデバイスを使い続ける限り幾度となく発生するエクスペリエンスでもあります。 顧客の製品利用統計情報では、ユーザーが少なくとも 1 日に 1 回は PC の起動とシャットダウンを行っていることを示しています。 コネクト スタンバイ機能を使用するとデバイスを起動する頻度を下げることができますが、ソフトウェアおよびファームウェアのアップデート、バッテリ低下状態、およびデバイスの主要な構成変更時には、起動が必要になる場合があります。

Windows 8.x 以降では、オン/オフの切り替え速度が以前のバージョンの Windows よりも大幅に速くなっています。 これまで使用されていたユーザー インタラクション モデルでは、代替ブート パスを示すキーを押すことでブートの割り込みを行っていました。 起動時間が大幅に短縮されたことにより、ブートの割り込みは現実的でなくなり、ブート エクスペリエンスにも悪影響を及ぼします。 後ろに戻る処理は長く、時間もかかるため、以前のリリースでは、別のオペレーティング システムを起動するなど、決定ポイントに対してできるだけ早い段階でブート プロセスを停止することが重要でした。 また、キーの押下を検出しアクティブ化する時間を作るためにすぐに起動時間が長くなっていました。 Windows 8.x および Windows 10 では、このような現象は発生しません。

既定のブート パフォーマンスが、休止状態テクノロジを活用することで大幅に改善されました。 オン/オフ エクスペリエンスのパフォーマンスに対する機能強化の詳細については、「休止状態 (S4) の中断と再開」を参照してください。 このトピックの考慮事項では、迅速なオン/オフの切り替え、これらの切り替えに関連するオプション、および OEM/ODM でエクスペリエンスを提供するために必要なコンポーネントを提供するユーザー モデルについて概説します。

考慮事項

起動遅延の主な原因は、OEM ソフトウェアのプリロードです。 高速スタートアップは、全体的な起動時間の約 50% を表し、起動時に開始される次のファーストパーティ プロセスおよびサードパーティ プロセスからの影響を直接受けます。

  • 再開中のサービス

  • トレイで実行中のショートカットや OEM 状態インジケーターなどのスタートアップ アプリ

  • ウイルス対策アクティビティ

これらのプロセスでは CPU およびディスクのシステム リソースを消費するため、デバイスが応答しなくなったり、アプリの起動時間が遅れたり、アプリの動作が遅くなったりするというボトルネックが発生する可能性があります。

オン/オフのパフォーマンスを最適化する場合は、次の推奨事項を考慮してください。

  • システムで読み込まれ、実行している受信トレイ以外のファーストパーティ プロセスまたはサードパーティ プロセスを確認します。

  • レジストリの実行キーを使用して、起動時に開始されたプロセスを判断します。通常、これらは IHV ハードウェア関連のプロセスになります。

  • ブート パスにマネージド コード プロセスを含めないでください。

  • 起動時にプロセスの開始を遅らせる手法を使用します。

  • 従来のデスクトップ アプリを、起動時に影響の出ない Microsoft Store アプリに変換することを検討してください。 IHV と連携して Microsoft Store デバイス アプリを活用します。

  • メモリ消費量がオン/オフの切り替え時間に与える影響について理解し、次の推奨事項に従ってください。

    • メモリ消費量を最適化して、休止状態ファイルのサイズを小さくします。

    • 新しい休止状態ファイルの診断モードを使用します。

    • ラップトップや超軽量ラップトップではハイブリッド スリープを有効にしないようにします。これは、スタンバイ/サスペンド状態(S3) の休止状態ファイルが生成されるためです。

  • 更新ツールによるプロセスを移行し、AM を使用して読み込まれるプロセスの数を減らします。

  • ディスク スループットがオン/オフのパフォーマンスに不可欠であることを理解します。 次に例を示します。

    • 平均すると、休止状態ファイルの読み取り/書き込み時間は、スタート画面を起動する時間の 50% を表します。

    • ほとんどのシステムでは、起動時にディスクがバインドされます。

    • より高速な HDD/SSD を使用すると、起動時に読み込まれ、初期化される大量のソフトウェアのプリロードによる影響を軽減できます。

    • CPU、ディスク パフォーマンス、およびメモリ容量のバランスを取ることを検討します。

  • ハイブリッド ドライブはオン/オフのパフォーマンスに役立ちます。新しいハイブリッド ドライブのヒント機能を使用することを検討します。

高速スタートアップ

Windows 8.x 以降、既定のシャットダウンと再起動のシナリオが更新され、高速スタートアップという名前になりました。 高速スタートアップはシャットダウン プロセスから始まり、休止状態プロセスと同様にディスクへのデータの書き込みなどが含まれます。 重要な違いは、すべてのユーザー セッション (セッション 1) がログオフし、残りの情報が休止状態ファイルに書き込まれることです。 この状態から PC を起動すると、Windows は、Windows、ドライバー、デバイス、およびサービスが初期化されるフル ブート プロセスを実行せずに、以前に初期化された状態を休止状態ファイルから読み取って、読み込みます。 このメソッドによって、ロック画面またはスタート画面を初期化するプロセスが速くなります。

さらに、休止状態テクノロジを使用する機能が拡張され、フル ブートよりもはるかに速くなった新しい既定の起動およびシャットダウン エクスペリエンスを作成します。 詳細については、次の図を参照してください。

高速スタートアップとシャットダウンのフェーズの図

より速くなった起動およびシャットダウン シーケンスでは、休止状態のインフラストラクチャを使用して PC を休止状態にします。 完全なシャットダウンやフル ブートとは異なり、ユーザー セッションが閉じ、休止状態が実行されます。 その結果、休止状態ファイルのサイズが大幅に小さくなり、休止および再開プロセスが高速になります。 また、このシーケンスでは、並列処理の最適化を利用しています。

システム サービスとシステム インテグレーターを使用してドライバーやアプリを作成する開発者は、メモリ リークなどのドライバーの品質に関する問題を監視する必要があります。 ドライバーの品質は常に重要ですが、ユーザーによるシャットダウン時はカーネル、ドライバー、およびサービスが再起動されるだけでなく保存して復元されるため、カーネルを再起動している間の稼働時間が以前のバージョンの Windows よりも大幅に長くなる可能性があることに注意してください。

フル ブート

最適なスタートアップ エクスペリエンスを得るには、次の推奨事項を考慮してください。

  • CPU パフォーマンス、ディスク パフォーマンス、メモリ容量のバランスを取ります。

  • UEFI 読み取りルーティングのパフォーマンスを最適化します。

  • リーフ ノード デバイスのドライバーが迅速な再開に関するガイドラインに従っていることを確認します。

  • ドライバーで S0 設定の電源 IRP をできるだけ早く完了し、他のデバイスが S0 設定の電源 IRP を起動しないようにします。

  • ドライバーとサービスにメモリ リークがないか検証します。

  • 絶対に必要な場合を除き、電源管理イベント通知を受信するためのサービスは登録しないようにします。

  • ドライバーが、D_IRP が完了するまで S_IRP の完了を待機しないようにします。 これにより、他のデバイスが S_IRP を受信できなくなり、シリアル化の遅延が発生して全体的な中断時間が長くなります。

API 動作のシャットダウン

新しいアプリにとってできる限り最善のエクスペリエンスを提供しながら、アプリとの最適な互換性を確保するために、高速スタートアップのためのシャットダウンを要求する新しいフラグが作成されました。 次の表では、新しいフラグとシャットダウン API の動作について説明します。 これらの API とフラグの詳細については、MSDN を参照してください。

API シャットダウンの動作
InitiateSystemShutdownEx 常に完全なシャットダウンを実行
InitiateSystemShutdown 常に完全なシャットダウンを実行
InitiateShutdown SHUTDOWN_HYBRID フラグを使用して高速スタートアップのためのシャットダウンを実行
ExitWindowsEx EWX_HYBRID_SHUTDOWN フラグを使用して、高速スタートアップのためのシャットダウンを実行

高速スタートアップのための休止またはシャットダウンが発生するタイミングの識別

デバイス ドライバーは、シャットダウン時に S4 の休止状態ではなく、 S5 対象の電源状態に切り替えるように通知を受けます。これが、実際の電源状態です。 これにより、シャットダウン後の高速スタートアップ用に別のウェイク動作をドライバーに設定できるようになります。 対象と有効な状態は、System_Power_State_Context 構造体にあります。

ほとんどのデバイスでは、S4 と S5 のウェイク動作の区別がバス ドライバー レイヤーで制御されます。 独自のバス ドライバーを実装している状況でこれら 2 つの動作を区別する必要がある場合は、Microsoft の担当者に追加情報についてお問い合わせください。 高速スタートアップ エクスペリエンスを実現するには、次のベスト プラクティスに従ってください。

  • CPU パフォーマンス、ディスク パフォーマンス、メモリ容量のバランスを取ります。

  • UEFI 読み取りルーティングのパフォーマンスを最適化します。

  • リーフ ノード デバイスのドライバーが迅速な再開に関するガイドラインに従っていることを確認します。

  • ドライバーで S0 設定の電源 IRP をできるだけ早く完了し、他のデバイスが S0 設定の電源 IRP を起動しないようにします。

  • マルウェア対策アプリとデバイス アプリ以外のアプリは起動時に立ち上げないようにします。

  • 起動時に RunOnce を使用してアプリを立ち上げないでください。

  • ブート パスでマネージド コード アプリを使わないようにします。

  • タスク スケジューラを使用して、重要ではないアプリの起動を遅らせます。

  • ドライバーとサービスにメモリ リークがないか検証します。

  • サービスに登録して、絶対に必要な場合にのみ電源管理イベントの通知を受け取ります。

  • ドライバーが、D_IRP が完了するまで S_IRP の完了を待機しないようにします。 待機してしまうと他のデバイスが S_IRP を受信できなくなり、シリアル化の遅延が発生して全体的な中断時間が長くなります。

休止状態 (S4) の中断と再開

休止状態への切り替えでは、メモリのすべての内容がプライマリ システム ドライブ上のファイルに書き込まれます。 このプロセスでは、Windows、アプリ、デバイスの状態が保持されます。 結合されたメモリ占有領域ですべての物理メモリを消費する場合、休止状態ファイルは、物理メモリのすべての内容を保存するのに十分な容量を確保できるサイズにする必要があります。 データは非揮発性記憶域に書き込まれるため、DRAM は自動更新を維持する必要はなく、電源をオフにできます。 この動作により、PC はオフ状態と同程度の低い電力消費量となります。

休止状態のユーザー シナリオ

最新バージョンの Windows を実行している PC で休止状態テクノロジを必要とする重大なシナリオを次に示します。

  • スリープから休止: システムはアイドル状態のまま、自動的に休止状態へと切り替わります。

  • バッテリ切れ: バッテリが切れた場合に、Windows が PC を自動的に休止状態にすることでデータの損失を防ぎます。

  • 温度状態: システムが、回路を保護するためにシステムの電源を自動的に切断する必要がある定義済みの温度に達します。

  • ユーザー開始: ユーザーが休止状態を選択して、現在の状態を最小限の電力消費で保存します。

この一覧は、PC に対するニーズや PC の機能が進化するにつれて更新される可能性がありますが、特にコネクト スタンバイに対応していない場合は、多くの PC で休止状態が引き続き使用されると予想されます。

休止状態フェーズ

休止状態フェーズの図

休止状態フェーズでは、さまざまなコンポーネントで休止状態フェーズが発生していることが確認されると、ユーザーのコンテキストとシステム状態が保存されます。 データが圧縮され、ディスクに書き込まれます。システムは、システム上のすべてのプロセッサ コアを使用してメモリ内のデータを圧縮し、ディスクにデータを書き込むときは 1 つのプロセッサを使用します。 すべてのデータがディスクに書き込まれた後、ファームウェアで電源をオフにする準備ができたことが確認されます。

ファームウェアの確認は、ACPI 4、セクション 4.5、表 4-13、およびセクション 7.3.4 で定義されている S4 オブジェクトで指定した値を使用し、スリープ型レジスタに書き込んで行われます。 ここでは、ファームウェアが次回の電源起動時に、フル ブートではなく再開を試行することを示しています。

再開フェーズ

再開フェーズの図

休止状態の再開は、ファームウェアの POST から開始します。これは、フル ブートに似ています。 Windows ブート マネージャーは、有効な休止状態ファイルを検出して休止状態からの再開が必要であることを検知し、システムに再開を指示してメモリの内容とアーキテクチャ上のすべてのレジスタを復元します。 休止状態から再開する場合、メモリの内容はディスクから読み取り、圧縮解除され、復元されます。システムは休止状態になったときとまったく同じ状態に戻ります。 メモリの内容が復元された後、デバイスが再起動され、マシンが実行状態に戻り、ログインの準備が整います。

デバイス ドライバーとサービスは、通知を受け取りますが再起動はしない点に注意してください。いずれも休止状態フェーズが発生した時点の状態に復元されます。

システム メモリの復元は、2 つのフェーズに分割されます。 最初のフェーズでは、カーネルの最低限の部分を復元し、次のフェーズでシステムの残り部分のメモリの復元を完了させます。 最初のフェーズは、シングル プロセッサ環境のコアを使用して行う必要があります。 ただし、最低限のシステム メモリが復元された後は、すべてのプロセッサ コアを使用して残りの部分のデータの圧縮解除と復元を並列して行います。これによりプロセスを大幅に高速化できます。

このプロセスは、プロセッサの機能に応じて暗号化/復号化アルゴリズムのサイズを適切に調整することで、さらに改善されます。

並列処理の最適化は、最小限の環境で使用できるデータがすべて含まれていることが保証されているシステムでのみ使用できます。 そのため、休止状態の再開操作中に使用されるクラッシュ ダンプ スタックに追加されたコンポーネントも、その最小限の環境の一部として宣言されていない場合は使用できません。 クラッシュ ダンプ フィルター ドライバーや、別のクラッシュ ダンプ パスを使用するデバイスといったコンポーネントを作成する場合は、このプロセスを実行できるようにするため Microsoft にお問い合わせください。

ファームウェア POST

POST 時間を短縮すると、電源オンから使用可能な状態になるまでの全体的な時間が短縮されます。 Windows の高速スタートアップが大幅に高速化したため、POST 時間も起動時間全体の中でより大きな割合を占めるようになる可能性があります。 POST 時間の要件に関する追加情報については、Windows ハードウェア認定の要件に記載されています。 この分析では、POST 時間の要件は、プリオペレーティング システム環境にあるハードウェア コンポーネントの全装備を完全に列挙して有効にしているプラットフォームで達成できることを示しています。

Windows 8 以降、すべての PC で Unified Extensible Firmware Interface (UEFI) 仕様 2.3.1 以降をベースとしたファームウェアを搭載することが求められています。 多くのシステムはそれ以前の古いファームウェア設計に基づいているため、ファームウェア設計を最適化してPOST 時間を短縮する良い機会となります。

UEFI アーキテクチャを介した初期化フローの図

UEFI アーキテクチャは、ファームウェアとプラットフォームの初期化のいくつかのフェーズを実行します。 これらの十分に定義されたフェーズに基づいた、POST 時間を短縮することのできる設計上の考慮事項がいくつかあります。

セキュリティ (SEC)

SEC フェーズでは、プラットフォームで SPI NOR フラッシュに格納されたプラットフォーム マイクロコードの抽出、圧縮解除、検証を実行します。 この電源オンの時点で、プラットフォームには初期化された RAM とそのバスが含まれています。 次のリストには、このフェーズで考慮すべきいくつかの質問が含まれています。

  • マイクロコードは SKU に固有ですか、それとも複数のプラットフォームに汎用できますか? マイクロコードのサイズは圧縮解除、RAM への移動、および検証に影響します。

    マイクロコードのリファクタリングを可能な限り小さくすることを検討してください。

  • SPI NOR フラッシュ バスの速度を上げることはできますか? 多くのプラットフォームで、SPI NOR 型フラッシュ パーツに対して複数のクロック速度がサポートされています。 多くの場合、低いクロック周波数 (16 MHz など) で動作していますが、高くすることができます。

    バス速度を上げて、NOR 型フラッシュから RAM へ移動する際のマイクロコードの待機時間を短縮するよう検討してください。

  • プラットフォームには十分な NOR 型フラッシュがありますか? コストを節約するため、多くのプラットフォームは最小限の NOR パーツを使用して設計されています。その結果、マイクロコードの圧縮率が高くなり、圧縮解除のコストが高くなります。

  • 圧縮率の低いコードを格納するには、より大きな NOR 型フラッシュ パーツの使用を検討してください。

マイクロコードの圧縮、設計、移動のバランスを取ると、POST 時間のパフォーマンスが向上する可能性があります。 SEC の最後に、検証済みのマイクロコードの UEFI カーネルの残りの部分と環境を NOR 型フラッシュから RAM にコピーします。

EFI 前初期化 (PEI)

カーネルが RAM に入ったら、プラットフォームでカーネルを初期化し、コードやシステム テーブルなどの要素についての整合性の検証を開始します。 最適化されていない汎用的なカーネルではなく、プラットフォームに合わせて最適化された UEFI カーネルを設計することを検討してください。 最適化には次が含まれます。

  • メモリ バッファーを最適化するカーネル ビルド中のフラグのコンパイル

  • プラットフォームの初期化に必要ないモジュールへのリンク

UEFI カーネルを最適化する方法のアイデアについては、ファームウェア デザイナーにお問い合わせください。

ドライバー実行環境 (DXE)

初期化のこの時点では、コア UEFI ドライバーとサードパーティの DXE ドライバーが読み込まれます。 オーナーは、ファームウェア デザイナーが提供するツールを使用して、最もパフォーマンスの低い DXE ドライバーを特定し、そのコードを最適化できるかどうかを評価できます。

このフェーズのもう一つの考慮事項は、読み込まれる DXE ドライバーの数です。 プラットフォームでは、ブートを保証するために必要なドライバーのみを読み込む必要があり、オプションのハードウェアには依存しません。 最終的な設計は、ターゲット ブートの選択によって異なります。

ブート デバイスの選択 (BDS)

ブート デバイスの選択は、Windows へハンドオフする前に行うプラットフォームの初期化の最後の手順です。 この手順では、ファームウェアによって、配置するブート デバイスと実行に移すブート デバイスが決まります。 ブート変数を慎重に設計し、最適化することが、Windows ブート ローダーへの移行に影響します。

USB の列挙

POST の USB 列挙部分では長い時間を要する場合があります。 Windows 8 で新たに導入された変更により、既定のブート ケースでは USB の列挙が不要になります。 POST にかかる時間の最適化に関する詳細については、シリコンおよびファームウェア ベンダーにお問い合わせください。 次のシナリオのように、ブート シーケンスが他のパスにブートするように設定されている場合は、USB を列挙することをお勧めします。

  • Windows To Go スタートアップ オプションで USB クラスのブート エントリがブート順の最初に挿入される場合など、ブート順の上位に他にも複数のオプションがある。

  • boot next 変数が設定されることで、別のブート デバイスが使用される。

  • 直前の起動でエラーが発生する。

アプリケーション

ブート パスに含まれるデスクトップ アプリは、オン/オフの切り替えとエネルギー効率に影響を与えます。 タスク マネージャーは影響が大きなデスクトップ アプリにフラグを設定し、常に実行中のデスクトップ アプリについてユーザーに通知します。 詳細については、「スタートアップ アプリ」を参照してください。 デスクトップ アプリは自動的に起動するのではなく、自動メンテナンスを使用して必要な場合にのみ実行することを強くお勧めします。

重要

定義済みの目標では、いずれも BIOS 初期化時間が除外されています。

優れたオン/オフ エクスペリエンスを実現するため、PC で次の表に示す目標を満たすことをお勧めします。

シナリオ タブレット (CS) コンバーチブル ノートブック オールインワン
高速スタートアップ (秒) < 25 <= 15 <= 15 <= 15
休止状態ファイルのサイズ (MB) < 300 <= 300 <= 300 <= 300
スタンバイの再開 (秒) 適用できません <= 7 <= 7 <= 5

メトリック ユニット 目標

レジストリの実行キーを使用して開始したプロセスの数

実行キーを使用して起動時に毎回開始するプロセスの合計数として定義されます。 オン/オフ後のリソース使用率 (CPU とディスク) に直接影響します。

(汎用イベント テーブルを使用して) 高速スタートアップのトレースで、次のいくつかの ETW イベントを確認することで見つかります。

プロバイダー名: Microsoft-Windows-Shell-CoreTask: Explorer_ExecutingFromRunKeyOpcode: win:Start

イベントのフィールド #1 (コマンド) には、プロセスを起動するために使用されるコマンド ラインを指定します。

count

< 10

高速スタートアップのオン/オフ後の通常の優先度の読み取りディスク IO

このメトリックは、以下にある Windows Assessment Console の評価結果から直接取得できます。

合計起動数 > オン/オフ後 > ディスク使用量の合計 > 通常の優先度の読み取り (バイト)

MB

< 30

評価とテスト

Windows Assessment Toolkit を使用すると、最小要件を超えて PC のパフォーマンスを向上させることができます。 オン/オフ エクスペリエンスに関連する Windows の評価には、次が含まれます。

  • 高速スタートアップの評価

  • フル ブートおよびシャットダウンの評価

  • スタンバイの評価

  • 休止状態の評価

高速スタートアップおよび休止状態の評価の新しいバージョンには、休止状態ファイルの診断モードが含まれます。 このモードでは、サイズの大きい休止状態ファイルに寄与するドライバーとアプリ、および複数ステージでの再開を実施しないストレージ ドライバーを検出できます。

システムの評価に関しては、休止状態ファイルに格納されているメモリ ページに、ドライバーの非ページ プール ページとアプリ/サービスのプライベート ワーキング セット ページという主に2つのカテゴリがあります。

新しいモードにより、どのソフトウェア コンポーネントのメモリ使用量を改善する必要があるかを理解できるようになります。

ツールとテクニカル リファレンス

オン/オフ エクスペリエンスの詳細を確認し、次のリソースのパフォーマンスを分析するためのツールをダウンロードすることができます。

リソースのタイトルとリンク Content type 説明
スタートアップ アプリ [アーティクル] スタートアップ アプリが Windows デバイスに含まれていることで与える影響についていくつか説明します。また、開発者 (ISV/IHV) や OEM に、スタートアップ アプリの使用パターンを再考して、バッテリの寿命と応答性を向上させるためのガイダンスを提供します。
オン/オフ切り替え評価の結果 ドキュメント オン/オフの評価によって生成される結果を解釈するのに役立ちます (起動パフォーマンス (高速スタートアップ)、ブート パフォーマンス (フル ブート)、スタンバイ パフォーマンス、および休止状態のパフォーマンス)。