仮想マシン (VM) を Azure に移行する際、一部のユーザーから、想定される vCPU の半分しかタスク マネージャーに表示されないという報告があります。ハードウェアとデバイス マネージャーには正しい CPU 数が表示されているにもかかわらずです。この記事では、この問題の根本原因を説明し、正常に実装された段階的な解決策を紹介します。
問題の概要
VM を D4s v4 サイズで移行したところ、4 基の vCPU を備えているはずなのに、次のことが確認されました。
- デバイス マネージャーには 4 基の CPU が正しく表示されます。

- タスク マネージャーには 2 基の仮想プロセッサしか表示されません。

- PowerShell (
Get-ComputerInfo) では 2 基の CPU しか報告されません。

この不一致は、VM が割り当てられたリソースを十分に活用していないように見えるため、パフォーマンス上の懸念につながる可能性があります。
根本原因
この問題は通常、ハイパースレッディングが無効になっていることが原因です。ハイパースレッディングをオフにすると、VM は仮想コアではなく物理コアを使用するため、タスク マネージャーには想定される vCPU の半分しか表示されません。
解決策
この問題を解決するには、Windows レジストリへの変更が必要です。その後、Azure ポータルから、またはコマンド ラインを使用して VM を再起動してください。注:ゲスト OS の内部から再起動するだけでは、変更は有効になりません。
問題を修正する手順
- レジストリ キーを変更する
管理者特権のコマンド プロンプトまたは PowerShell セッションで次のコマンドを実行します。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 72 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
- VM を再起動する
再起動は、Azure ポータルから、または Azure CLI を使用して実行します。例:
az vm restart --name <VM_NAME> --resource-group <RESOURCE_GROUP>
- 重要:ゲスト OS の内部から VM を再起動しても([スタート] メニューからなど)、変更は適用されません。
検証
上記の手順が完了したら、次の操作を行います。
- まず、タスク マネージャーを開き、vCPU の数が正しく表示されていることを確認します。
- PowerShell を使用して CPU 数を確認します。
(Get-ComputerInfo).CsProcessors
これで問題は解決され、VM は割り当てられたリソースをすべて活用できるようになります。
補足事項
- この解決策は、Azure サポート チームによって正常にテストおよび実装されました。
- 特定のワークロードのためにハイパースレッディングを意図的に無効にしていた場合は、この解決策を適用する前にチームに相談してください。
まとめ
このレジストリの変更により、Azure VM のタスク マネージャーに vCPU の半分しか表示されない問題が解決されます。構成が正しいことを確認し、Azure ポータルから VM を再起動することは、修正を有効にするために重要です。これらの手順に従うことで、ユーザーは割り当てられた VM リソースを最大限に活用し、パフォーマンスのボトルネックを回避できます。