こんにちは、阿久津です。Creators Updateの名前で2017年4月12日からリリースが始まったWindows 10 バージョン1703は、4GB以上の物理メモリーを搭載したPCで、Svchost(Windowsサービスのホストプロセス)のプロセスを分離する機能が加わりました。詳しくは「Windows 10大百科」をご覧いただくとして、OSの安定性向上は歓迎すべきことです。ただ、メモリー増設が難しい2in1 PCなどは、アプリケーションの動作に悪影響を及ぼす可能性も排除できません。

本機能が有効になるか否かは、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlキーのDWORD値「SvcHostSplitThresholdInKB」で定められています。今回は、物理メモリーを4GBしか搭載していないPCを対象に、Svchostのプロセス分離を行うしきい値(メモリー容量)を8GB以上に変更するチューニングをご紹介しましょう。

1. 管理者権限でレジストリエディターを起動します。
2. レジストリエディターが起動したら、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Controlキーを開きます。
3. DWORD値「SvcHostSplitThresholdInKB」のデータを10進数で「8388608」に変更します。
4. <×>ボタンをクリックして、レジストリエディターを終了します。
5. Windows 10を再起動します。

これで操作が完了しました(図01~05)。

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

図02 レジストリエディターが起動したら、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Controlキーを開きます

図03 DWORD値「SvcHostSplitThresholdInKB」をダブルクリックし、<10進数>をクリックします。続いてデータを「8388608」に変更して<OK>ボタンをクリックしてください

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

図05 <スタート>ボタン→<電源>ボタン→<再起動>と順にクリックします

それでは結果を確認しましょう。[Ctrl]+[Shift]+[ESC]キーを押して「タスクマネージャー」を起動します。<プロセス>タブの一覧から任意のサービスホストをクリックして展開してください。チューニング前は各サービスが個別に起動していましたが、チューニング後は複数のサービスが1つのプロセス下で動作していることが確認できます(図06~07)。

図06 こちらはチューニング前の状態。1つのサービスホスト(Svchost)は1つのサービスを実行しています

図07 チューニング後は1つのサービスホスト下で複数のサービスが実行されます

Windowsは多目的な機能を実現するため「サービス」という形で、多くのプログラムをバックグラウンドで実行してきました。例えば、Windows Updateは「C:\Windows\system32\svchost.exe -k netsvcs」をトリガーを使って起動しています(図08)。

図08 「services.msc」を実行すると起動する「サービス」

Windows 10バージョン1607までは、複数のサービスを1つのSvchostで管理(起動)することで、消費メモリーを節約してきました。しかし、複数のサービスを制御することで、CPU負荷が高まるなどの弊害を招いていたのも事実です。また、1つのサービスが意図せずハングアップした場合、Svchostを巻き込んでOS全体をクラッシュさせてしまうこともありました。そのためMicrosoftは、メモリーの消費よりも安定性を優先するため、今回の変更を加えたのでしょう。

具体的には、DWORD値「SvcHostSplitThresholdInKB」のデータである「3670016(10進数)」がポイントです。この数値はKB単位のため、約3.67GB以上のメモリーを搭載するPCではプロセス分離を実行しますが、この数値を8GBとなる「8388608(8,192×1,024)」に変更して機能を抑止させました。例えばデスクトップPCに本チューニングを適用し、メモリーの増設からプロセス分離機能のしきい値を4GBに変更する場合は、ステップ03の数値を「380000(16進数)」に戻してください。

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

阿久津良和(Cactus)