こんにちは、阿久津です。Windows Vista以降のWindows OSでは、起動時のブートプロセスを検査して、ファイルトレース情報を作成。そして、メモリー上のキャッシュを利用してブートプロセスを最適化する「Windows ReadyBoot」機能が備わりました。USBメモリーなどをHDD(ハードディスクドライブ)のキャッシュ領域に指定することで、デスクトップアプリの起動などを高速化する「Windows ReadyBoost」と名称が似通っているため混合しがちですが、似て非なるもの。

こちらの技術資料によりますと、OS起動後のアイドル時に前述のファイルトレース情報の分析を行いますが、利用可能なメモリーが1.7ギガバイト未満の場合、ReadyBootはキャッシュ内のファイルを自動的に圧縮する機能が備わっています(いずれもWindows 7を前提として記述されたものですが、Windows 8もおおむね同等の内容と言えるでしょう)。しかし、Windows 8のサービスを確認しても同名を持つサービスは見当たりません。これはReadyBootが「Superfetch(サービス名:SysMain)」に含まれる機能だからです(図01)。

また、使用パターンを長期間にわたって分析し、メモリーに保存されたデータを最適化する「Windows Superfetch」は、システムドライブをHDDではなくSSD(ソリッドステートドライブ)にしている場合、ReadyBoot機能を無効にする仕組みになりました。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\ReadyBootキーにあるDWORD値「Start」を確認しますと、通常の環境では値のデータが「1」のため起動しますが、SSDを搭載した環境では値のデータが「0」に変更されていることが確認できます(図01~02)。

図01 Windows ReadyBootはWindows Superfetchの一機能として動作しています

図02 システムドライブをSSDにしている場合、Windows ReadyBootは自動的に無効となります

Windows 8は、デバイスの初期化などをイメージファイルに格納することでブートプロセスをバイパスさせた「高速スタートアップ」により、十分高速化されています。そのため、ディスクアクセスが頻繁に起こるのを避けるため、SuperfetchやReadyBootをわざわざ無効にするメリットは大きくありません。SSDなどのストレージ寿命を延ばすため無効にするという判断も間違いではありませんが、同環境ではReadyBootだけでなくReadyBoostも自動的に無効にしますので、Superfetchサービスを無効にするのは得策ではないでしょう。

その一方で、OS起動を高速化するアプローチとして、起動遅延という概念が以前から導入されています。Windows OS起動後に各サービスを同時に起動しますと、I/Oに過度の負担が発生し、システムの応答が著しく低下していたのはWindows XP以前から使っていた方ならご承知のとおり。

しかし、この起動遅延はサービスにのみ適用され、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runキーや、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Runキーで指定したエントリに加え、%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startupフォルダーや、%ProgramData%\Microsoft\Windows\Start Menu\Programs\StartUpフォルダーに作成したショートカットファイルからの起動には適用されません。

そこで今週はWindows OSの応答性を優先するため、デスクトップアプリの自動起動を遅らせるチューニングを紹介します。

1. 管理者権限でレジストリエディターを起動します。
2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Explorer\Advanced\DelayedAppsキーを開きます。
3. DelayedAppsキーの所有者およびアクセス権をAdministratorsグループに変更します。
4. DWORD値「Delay_Sec」を開き、値のデータを10進数で「60」に変更します。
5. レジストリエディターを終了し、Windows 8を再起動します。

これでチューニングが完了しました(図03~13)。

図03 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図04 レジストリエディターが起動したら、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Explorer\Advanced\DelayedAppsまでキーをたどって開きます

図05 DelayedAppsキーを右クリックし、メニューの<アクセス許可>をクリックします

図06 「~アクセス許可」ダイアログが起動したら、<詳細設定>ボタンをクリックします

図07 「~セキュリティの詳細設定」ダイアログが起動します。<変更>をクリックしてください

図08 テキストボックスに「Administrators」と入力し、<名前の確認>ボタンをクリックします。テキストボックスの内容が「{コンピューター名}\Administrators」に変更されたら<OK>ボタンをクリックしてください

図09 <サブコンテナーとオブジェクトの所有者を置き換える>→<OK>ボタンと順番にクリックします

図10 「~アクセス許可」ダイアログに戻ったら、一覧から「Administrators」を選択し、「フルコントロール」の「許可」のチェックボックス→<OK>ボタンと順番にクリックします

図11 DWORD値「Delay_Sec」をダブルクリックで開き、<10進数>をクリックしてから値のデータを「60」に変更して、<OK>ボタンをクリックします

図12 <×>ボタンをクリックして、レジストリエディターを終了させます

図13 [Win]+[I]キーを押して設定チャームを呼び出し、<電源>ボタン→<再起動>と順番にクリックします

それでは結果を確認してみましょう。Windows 8にサインインした直後からスタートアッププログラムの様子をみますと、約1分後に次々と起動していることが確認できるはずです。今回チューニングを試した方はお気付きのとおりWindows 7およびWindows 8には、あらかじめ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \Advanced\DelayedAppsキー、そして、DWORD値「Delay_Sec」が存在しました。

Windows Vistaの場合、DWORD値「Delay_Sec」の値のデータは「60」のため、今回のチューニングと同じ動作を行います。一方、Windows 7およびWindows 8の値のデータは「0」、つまり遅延ゼロとなるため、サインイン時に過度のアクセスが発生し、OSの応答性が若干鈍くなるという仕組みになりました。例えば低スペックのコンピューターでWindows 8を使い、再起動を多用するシーンでは効果があるものの、一般的なデスクトップ環境では、メリットの少ないチューニングです。ご自身の環境を踏まえて実行してください。

それでは、また次号でお目にかかりましょう。

阿久津良和(Cactus