この記事では、Windows Server と Windows の仮想プロセッサ スケジューリング ロジックのモードについて説明します。 これらのモードまたはスケジューラの種類によって、Hyper-V Hypervisor がゲスト仮想プロセッサ間での作業の割り当てと管理を行う方法が決まります。 Hyper-V ホスト管理者は、以下の作業を実行できます。
- ゲスト仮想マシン (VM) に最適なハイパーバイザー スケジューラの種類を選択する。
- スケジュール ロジックを利用するように VM を構成します。
背景
仮想プロセッサ のスケジューリングの背後にあるロジックと制御 Hyper-V 検討する前に、同時マルチスレッド (SMT) などの特定の概念と、プロセッサ Hyper-V 仮想化する方法を理解することが重要です。
SMT について
SMT は、独立した独立した実行スレッドがプロセッサ リソースを共有する方法を提供する、最新のプロセッサ設計の手法です。 通常、SMT はワークロードのパフォーマンスを適度に向上させます。 SMT では、可能な場合に計算を並列化することで命令のスループットを高めます。 ただし、スレッドが共有プロセッサ リソースに対して互いに競合する場合、パフォーマンスが大幅に向上しないことがあります。 パフォーマンスが若干低下する可能性もあります。
Windows Server で SMT を使用するには、互換性のあるプロセッサが必要です。 Intel Hyper-Threading Technology (Intel HT Technology) または Advanced Micro Devices (AMD) SMT を搭載したプロセッサは、互換性のあるプロセッサの例です。
この記事における SMT の知識と Hyper-V での使われ方についての説明は、Intel システムと AMD システムの両方に対して同等に当てはまります。
- Intel HT テクノロジの詳細については、「Intel ハイパースレッディング テクノロジー」を参照してください。
- AMD SMT の詳細については、「 AMD "Zen" コア アーキテクチャ」を参照してください。
Hyper-V におけるプロセッサ仮想化の方法を理解する
ハイパーバイザー スケジューラの種類を検討する前に、アーキテクチャ Hyper-V 理解しておく必要があります。 このアーキテクチャのしくみの詳細な概要については、「 Hyper-V テクノロジの概要」を参照してください。 ここでは、次の概念に留意してください。
Hyper-V は、ハイパーバイザーの制御下で、VM パーティションを作成して管理し、それらの間でコンピューティング リソースを割り当てて共有します。 パーティションは、個々のゲスト VM 間や、ゲスト VM とルート パーティションとの間に、それぞれを分離する強力な境界を提供します。
ルート パーティションもそれ自体が VM パーティションの一種ですが、ゲスト VM にない特有のプロパティと特権を持っています。 ルートパーティションとは。
- すべてのゲスト VM を制御する管理サービスを提供します。
- 仮想デバイスのサポートをゲストに提供します。
- ゲスト VM のすべてのデバイスの入力と出力を管理します。
ルート パーティションでは、アプリケーション ワークロードを一切実行しないことをお勧めします。
ルート パーティションの仮想プロセッサと基になる論理プロセッサの間には、1 対 1 のマッピングが存在します。 ホスト仮想プロセッサは、常に同じ基になる論理プロセッサ上で実行されます。 ルート パーティション仮想プロセッサの移行はありません。
既定では、ルート パーティション仮想プロセッサをホストする論理プロセッサでもゲスト仮想プロセッサを実行できます。
ハイパーバイザーは、ゲスト仮想プロセッサを、使用可能な任意の論理プロセッサで実行するようにスケジュールできます。 ハイパーバイザー スケジューラは、ゲスト仮想プロセッサをスケジュールするときに、テンポラル キャッシュの局所性、一意でないメモリ アクセス (NUMA) トポロジ、およびその他の多くの要因を考慮しようとします。 ただし、最終的には、仮想プロセッサは任意のホスト論理プロセッサでスケジュールできます。
ハイパーバイザー スケジューラの種類
Hyper-V ハイパーバイザーでは、基になる論理プロセッサ上でハイパーバイザーが仮想プロセッサをスケジュールする方法を決定するスケジューラ ロジックのいくつかのモードがサポートされています。 これらのスケジューラの種類は次のとおりです。
クラシック スケジューラ
クラシック スケジューラは、Windows Server 2019 より前のすべてのバージョンの Hyper-V で使用される既定のスケジューラです。 クラシック スケジューラは、ゲスト仮想プロセッサ用のフェアシェア、プリエンプティブ、ラウンド ロビン スケジューリング モデルを提供します。
クラシック スケジューラの種類は、プライベート クラウド、ホスティング プロバイダーなど、ほとんどの従来の Hyper-V 使用に適しています。 クラシック スケジューラの種類のパフォーマンス特性は、次のようなさまざまな仮想化シナリオをサポートするように最適化されています。
- 仮想プロセッサの論理プロセッサへの過剰割り当て。
- 多数の異種 VM とワークロードを同時に実行する。
- 大規模なハイ パフォーマンス VM の実行。
- Hyper-V の全機能セットを制限なしでサポートする用途や、その他のシナリオ。
コア スケジューラ
ハイパーバイザー コア スケジューラは、クラシック スケジューラ ロジックの代替手段です。 コア スケジューラは、Windows Server 2016 および Windows 10 バージョン 1607 以降で使用できます。 コア スケジューラは、ゲスト ワークロードの分離のための強力なセキュリティ境界を提供します。 また、SMT 対応仮想化ホスト上で実行される VM 内のワークロードのパフォーマンスの変動も軽減されます。 コア スケジューラでは、SMT 対応の 1 つの仮想化ホスト上で SMT VM と非 SMT VM の両方を同時に実行できます。
コア スケジューラには以下の特徴があります。
- 仮想化ホストの SMT トポロジを使用します。
- オプションで、SMT ペアをゲスト VM に公開できます。
- 1 つの VM に属するゲスト仮想プロセッサのグループを、SMT 論理プロセッサの複数のグループ上でスケジュールできます。
この作業は対称的に行われます。 論理プロセッサが 2 つのグループにある場合、仮想プロセッサは 2 つのグループでスケジュールされ、コアは VM 間で共有されません。 SMT が有効になっていない VM の仮想プロセッサをスケジュールすると、その仮想プロセッサの実行時にコア全体が消費されます。 コア スケジューラを使用する場合:
- ゲスト ワークロードの分離のための強力なセキュリティ境界が作成されます。 ゲスト仮想プロセッサは、基になる物理コア ペアでのみ実行でき、サイドチャネル スヌーピング攻撃の脆弱性が軽減されます。
- これにより、スループットの変動性が低下します。
- パフォーマンスが低下する可能性があります。 グループ内の 1 つの仮想プロセッサしか実行できない場合、コア内の命令ストリームの 1 つだけが起動します。 もう 1 つは待機状態です。
- ゲスト VM で実行されているオペレーティング システム (OS) とアプリケーションでは、物理マシンと同様に、SMT 動作とプログラミング インターフェイス (API) を使用して、SMT スレッド間で作業を制御および分散できます。
Windows Server 2019 の時点では、Hyper-V は既定でコア スケジューラを使用します。 Windows Server 2016 などの以前のバージョンでは、コア スケジューラは省略可能であり、クラシック スケジューラが既定のスケジューラです。
ホストの SMT が無効になっているコア スケジューラの動作
場合によっては、ハイパーバイザーの構成でコア スケジューラが選択されたにもかかわらず、SMT 機能がオフになっていることや、仮想化ホスト上に機能が存在しないことがあります。 そのような場合、ハイパーバイザー スケジューラの種類の設定に関係なくクラシック スケジューラの動作が適用されます。
ルート スケジューラ
ルート スケジューラは、Windows 10 バージョン 1803 に到着しました。 ルート スケジューラの種類を有効にすると、ハイパーバイザーによって作業スケジュールのルート パーティション制御が提供されます。 ルート パーティション OS インスタンスでは、NT スケジューラは、システム論理プロセッサに作業を割り当てるすべての側面を管理します。
ルート スケジューラは、ユーティリティ パーティションをサポートし、Windows Defender Application Guard (WDAG) で使用されるような強力なワークロード分離を提供するという独自の要件に対応しています。 このシナリオでは、スケジュールの責任をルート OS に任せることにいくつかのメリットがあります:
- コンテナー シナリオに応じた CPU リソース制御とユーティリティ パーティションを組み合わせると、管理と展開をシンプルに行えるようになります。
- ルート OS スケジューラは、コンテナー内におけるワークロードの CPU 使用率に関するメトリックをいつでも収集できる立場にあります。 このデータをスケジュール ポリシーへの入力として使用し、システム内の他のすべてのワークロードに適用できます。
- また、同じそれらのメトリックを、アプリケーション コンテナーで実行される作業とホスト システムとの関連付けに役立てることもできます。 ただし、従来の VM ワークロードに関してそれらのメトリックを追跡することは、より困難です。実行中のすべての VM で発生する作業の一部がルート パーティションで実行されるためです。
クライアント システムでのルート スケジューラの使用
Windows 10、バージョン 1803 から、ルート スケジューラはデフォルトでクライアント システムでのみ使用されるようになりました:
- ハイパーバイザーを有効にして、仮想化ベースのセキュリティと WDAG ワークロードの分離をサポートできます。
- 異種コア アーキテクチャを使用して将来のシステムを適切に運用することが重要です。
この構成は、クライアント システムでサポートされる唯一のハイパーバイザー スケジューラの構成です。 管理者は、Windows クライアント システムの既定のハイパーバイザー スケジューラの種類をオーバーライドしないでください。
VM の CPU リソース制御とルート スケジューラ
ハイパーバイザー ルート スケジューラを有効にすると、Hyper-V ハイパーバイザーが個々の VM プロセッサで使用するリソース制御はサポートされません。 ルート OS では、スケジューラ ロジックによってホスト リソースがグローバルに管理され、個々の VM のゲスト リソースは管理されません。 VM ごとの Hyper-V プロセッサリソースの制御(上限、ウェイト、予約など)は、ハイパーバイザーがクラシックスケジューラやコアスケジューラの種類など、仮想プロセッサのスケジュールを直接制御する場合にのみ適用されます。
サーバー システムでのルート スケジューラの使用
現時点では、サーバー上でルート スケジューラと Hyper-V を併用することはおすすめしません。 そのパフォーマンス特性は、多くのサーバー仮想化デプロイに典型的な幅広いワークロードに対応するように、まだ完全には特徴付けおよび調整されていません。
ゲスト VM で SMT を有効にする
コア スケジューラの種類を使用するように仮想化ホストのハイパーバイザーを構成した後、SMT を使用するようにゲスト VM を構成することもできます。 具体的には、ゲスト VM に公開する仮想 SMT スレッドの数を指定できます。 ゲスト OS スケジューラと VM ワークロードは、独自の作業スケジュールで SMT トポロジを検出して使用できます。
- Windows Server 2016 の場合、ゲスト SMT は既定の構成では有効になりません。 Hyper-V ホスト管理者が明示的に有効にする必要があります。
- Windows Server 2019 以降のバージョンでは、ホストで作成した新しい VM は、既定でホスト SMT トポロジを継承します。 たとえば、コアあたり 2 つの SMT スレッドを持つホスト上に作成するバージョン 9.0 VM には、コアごとに 2 つの SMT スレッドもあります。
ゲスト VM の SMT を有効にするには、PowerShell を使用する必要があります。 Hyper-V マネージャーには対応するユーザー インターフェイスが用意されていません。 ゲスト VM で SMT を有効にするには:
Hyper-V Administrators または同等のグループのメンバーであるアカウントを使用して、PowerShell ウィンドウを開きます。
Set-VMProcessor -VMName <VM-name> -HwThreadCountPerCore <n>
を実行します。なお、<n>
はゲスト VM から見たコアあたりの SMT スレッド数です。0
に<n>
の値を使用する場合、HwThreadCountPerCore
値はコアあたりのホストの SMT スレッド数に設定されます。注
Windows Server 2016 では、
HwThreadCountPerCore
を0
に設定することはできません。
次のスクリーンショットは、VM で実行されているゲスト OS から取得されたシステム情報を示しています。 2 つの仮想プロセッサがあり、SMT が有効になっています。 ゲスト OS は、同じコアに属する 2 つの論理プロセッサを検出します。
ハイパーバイザー スケジューラの種類を構成する
既定で使用 Hyper-V ハイパーバイザー スケジューラの種類は、OS のバージョンによって異なります。 どのスケジューラが OS の既定のスケジューラであっても、コア スケジューラを使用するようにハイパーバイザーを構成できます。 コア スケジューラは、対応する物理 SMT ペアで実行するゲスト仮想プロセッサを制限することで、セキュリティを強化します。 この構成では、ゲスト仮想プロセッサの SMT スケジューリングで VM を使用できます。
注
Windows Server 2016 では、Hyper-V は既定でクラシック スケジューラを使用します。 Windows Server 2016 以降で Hyper-V を使用する場合は、コア スケジューラを選択することをお勧めします。 このスイッチを使用すると、仮想化ホストが悪意のある可能性のあるゲスト VM から最適に保護されます。
セキュリティとパフォーマンスへの影響を考慮する
Hyper-V ホストが最適なセキュリティ構成で展開されるようにするために、Hyper-V では、Windows Server 2019 以降では、コア ハイパーバイザー スケジューラ モデルが既定で使用されます。 ホスト管理者は、必要な場合、従来のクラシック スケジューラを使用するようにホストを構成することもできます。 管理者は、既定の設定をオーバーライドする前に、各スケジューラの種類が仮想化ホストのセキュリティとパフォーマンスに与える影響を慎重に読み、理解し、考慮する必要があります。 詳細については、「Hyper-V ハイパーバイザー スケジューラの種類の選択について」を参照してください。
Windows Server でハイパーバイザー スケジューラの種類を選択する
ハイパーバイザー スケジューラの構成は、 hypervisorschedulertype
ブート構成データ (BCD) エントリによって制御されます。
スケジューラの種類を選択するには:
管理者特権でコマンド プロンプトを開きます。
「
bcdedit /set hypervisorschedulertype <type>
」と入力します。ここで、<type>
は次のいずれかのオプションです。Classic
Core
Root
ハイパーバイザー スケジューラの種類に対して行った変更を有効にするには、システムを再起動する必要があります。
注
現時点では、ハイパーバイザー ルート スケジューラは Windows Server 上の Hyper-V ではサポートされていません。 Hyper-V 管理者は、サーバー仮想化シナリオにおいてルート スケジューラを使用する構成を試すこともしないでください。
現在のスケジューラの種類を確認する
Windows システム ログを調べることで、Hyper-V が現在使用しているハイパーバイザー スケジューラの種類を確認できます。 ID が 2 の最新のハイパーバイザー起動イベントを探します。 そのイベントは、ハイパーバイザーの起動時に構成されたハイパーバイザー スケジューラの種類を報告します。 ハイパーバイザー スケジューラの種類には、次の値を指定できます。
価値 | スケジューラの種類 |
---|---|
1 | クラシック スケジューラ、SMT が無効 |
2 | クラシック スケジューラ |
3 | コア スケジューラ |
4 | ルート スケジューラ |
イベント ビューアーまたは PowerShell を使用して、ハイパーバイザー起動イベント ログを表示できます。
PowerShell を使用して、ハイパーバイザー起動イベントのシステム ログに対してクエリを実行する
PowerShell を使用して ID が 2 のハイパーバイザー イベントをシステム ログに照会するには、次のコマンドを実行します。
Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1