個別のデバイスの割り当てにより、物理 PCIe (周辺機器相互接続エクスプレス) ハードウェアに仮想マシン (VM) 内から直接アクセスできます。 この記事では、使用できるデバイスの種類、ホスト システムの要件、VM に適用される制限、およびセキュリティへの影響について説明します。
個別のデバイスの割り当ての場合、Microsoft は、グラフィックス アダプターと NVMe ストレージ デバイスの 2 つのデバイス クラスをサポートしています。 他のデバイスも動作する可能性があり、ハードウェア ベンダーはそれらのデバイスに対するサポートの有無を明示することができます。 その他のデバイスのサポートについては、特定のハードウェア ベンダーにお問い合わせください。
GPU 仮想化のその他の方法については、「Windows サーバーで GPU アクセラレーションを計画する」を参照してください。 個別のデバイスの割り当てを試す準備ができたら、「個別のデバイスの割り当てを使用してデバイスを展開する」または「個別のデバイスの割り当てを使用して NVMe 記憶装置を展開する」にアクセスできます。
サポートされている VM およびゲスト オペレーティング システム
個別のデバイスの割り当ては、第 1 世代または第 2 世代の VM でサポートされています。 サポートされているゲストには次が含まれます。
- Windows 10 以降
- Windows Server 2016 以降
詳細については、「Windows Server と Windows 上の Hyper-v がサポートされている Linux および FreeBSD 仮想マシン」を参照してください。
システム要件
ご使用のシステムが、Windows Server のハードウェア要件と Windows Server にインストールされた Hyper-v のシステム要件を満たしている必要があります。 個別のデバイスの割り当てには、PCIe ファブリックの構成 (ネイティブ PCI Express コントロール) のオペレーティング システム制御を許可できるサーバー クラス ハードウェアも必要です。 さらに、PCIe Root Complex は Access Control Services (ACS) をサポートする必要があります。これにより、Hyper-V は、すべての PCIe トラフィックに強制的に入出力メモリ管理ユニットを通過させることができます。
通常、これらの機能は、サーバーの BIOS で直接公開されず、多くの場合、他の設定の背後に隠されています。 SR-IOV をサポートするために BIOS でも同じ機能が必要な場合、[SR-IOV の有効化] を設定する必要がある場合があります。BIOS で正しい設定を特定できない場合は、システム ベンダーにお問い合わせください。
ハードウェアが個別のデバイスの割り当てに対応していることを確認するには、Hyper-V 対応ホストでマシン プロファイル スクリプトを実行できます。 このスクリプトでは、サーバーが正しく設定されているかどうか、およびどのデバイスが個別のデバイスの割り当てに対応しているかをテストします。
デバイスの要件
すべての PCIe デバイスで個別のデバイス割り当てを使用できるわけではありません。 レガシ (INTx) PCI 割り込みを使用する古いデバイスはサポートされていません。 詳細については、「個別のデバイス割り当て - マシンおよびデバイス」を参照してください。 マシン プロファイル スクリプトを実行して、個別のデバイス割り当てに使用できるデバイスを表示することもできます。
デバイスの製造元は、Microsoft の担当者に連絡して詳細を確認できます。
デバイスドライバ
個別のデバイス割り当ては、PCIe デバイス全体をゲスト VM に渡します。 VM 内にデバイスをマウントする前に、ホスト ドライバーをインストールする必要はありません。 ホストの唯一の要件は、デバイスの PCIe ロケーション パス を判断できることだけです。 デバイスを識別しやすくするために、デバイスのドライバーをインストールできます。 ホストにデバイス ドライバーがインストールされていない GPU は、Microsoft Basic Render Device として表示される場合があります。 デバイス ドライバーがインストールされている場合は、その製造元とモデルが表示される可能性があります。
デバイスがゲスト内にマウントされると、通常と同じように、製造元のデバイス ドライバーをゲスト VM 内にインストールできます。
VM の制限事項
個別のデバイス割り当ての実装方式の性質上、デバイスが接続されている間は VM の一部の機能が制限されます。 次の機能は使用できません。
- VM の保存/復元
- VM のライブ マイグレーション
- 動的メモリの使用
- 高可用性 (HA) クラスターへの VM の追加
セキュリティ
個別のデバイスの割り当ては、デバイス全体を VM に渡します。 ここで「渡す」とは、そのデバイスのすべての機能に、ゲスト オペレーティング システムからアクセスできることを意味します。 ファームウェアの更新などの一部の機能は、システムの安定性に悪影響を与える可能性があります。 ホストからデバイスをマウント解除すると、管理者に多数の警告が表示されます。 個別のデバイス割り当ては、VM のテナントが信頼できる場合のみ使用する必要があります。
管理者が信頼されていないテナントとともにデバイスを使用する必要がある場合、デバイスの製造元が、ホストにインストールできるデバイスのリスク軽減ドライバーを作成できます。 デバイスのリスク軽減ドライバーの提供に関する詳細については、デバイスの製造元にお問い合わせください。
デバイスのリスク軽減ドライバーがインストールされていないデバイスのセキュリティ チェックを省略する場合は、-Force
パラメーターを Dismount-VMHostAssignableDevice
コマンドレットに渡す必要があります。 これを渡すと、そのシステムのセキュリティ プロファイルが変更されます。 この変更は、プロトタイプ作成中または信頼できる環境でのみ行う必要があります。
PCIe ロケーション パス
デバイスをホスト側でマウント解除およびマウントするには、PCIe ロケーション パスが必要です。 ロケーション パスの例は PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
です。
マシン プロファイル スクリプトでも、PCIe デバイスのロケーション パスを返します。
デバイス マネージャーを使用してロケーション パスを取得する
- デバイス マネージャーを開き、デバイスを見つけます。
- デバイスを右クリックし、[ プロパティ] を選択します。
- [ 詳細 ] タブで、[ プロパティ ] ドロップダウン メニューを展開し、[ 場所のパス] を選択します。
- PCIROOT で始まるエントリを右クリックし、[コピー] を選択してデバイスの場所パスを取得します。
MMIO スペース
一部のデバイス (特に GPU) では、そのデバイスのメモリにアクセスできるようにするために、VM に追加の MMIO 領域を割り当てる必要があります。 既定では、各 VM には、128 MB の低 MMIO 領域と 512 MB の高 MMIO 領域が割り当てられています。 ただし、デバイスによってはより多くの MMIO 領域が必要になる場合や、複数のデバイスをパススルーすることで、必要な領域のがこれらの値を超えることがあります。 MMIO 領域の変更は簡単で、PowerShell で次のコマンドを使用して実行できます。
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm
割り当てる MMIO 領域の量を決定する方法としては、マシン プロファイル スクリプトを使用する方法が最も簡単です。 マシン プロファイル スクリプトをダウンロードして実行するには、PowerShell コンソールで次のコマンドを実行します。
curl -o SurveyDDA.ps1 https://raw.githubusercontent.com/MicrosoftDocs/Virtualization-Documentation/live/hyperv-tools/DiscreteDeviceAssignment/SurveyDDA.ps1
.\SurveyDDA.ps1
割り当て可能なデバイスの場合は、スクリプトがそのデバイスの MMIO 要件を表示します。 スクリプトの出力の例を次に示します。
NVIDIA GRID K520
Express Endpoint -- more secure.
...
And it requires at least: 176 MB of MMIO gap space
...
低 MMIO 領域は、32 ビットのオペレーティング システムと 32 ビット アドレスを使用するデバイスでのみ使用されます。 32 ビット構成は一般的ではないので、ほとんどの場合、VM の高 MMIO 領域を設定するだけで十分です。
Important
VM に MMIO 領域を割り当てるときは、必ず十分な MMIO 領域を指定してください。 MMIO 領域は、割り当て対象のすべてのデバイスで必要となる MMIO 領域に加え、数 MB の MMIO 領域を必要とする他の仮想デバイス用のバッファーを含めた合計にする必要があります。 前述の既定の MMIO 値を、低 MMIO と高 MMIO のバッファー (それぞれ 128 MB と 512 MB) として使用します。
前の例を検討してみます。 1 つの K520 GPU を割り当てる場合は、VM の MMIO 領域を、マシン プロファイル スクリプトによる出力にバッファーを足した値 (176 MB + 512 MB) に設定します。 3 つの K520 GPU を割り当てる場合は、MMIO 領域を、基本量の 176 MB の 3 倍にバッファーを足した値 (528 MB + 512 MB) に設定します。
MMIO 領域の詳細については、Tech Community ブログの「個別のデバイス割り当て - GPU」を参照してください。
マシン プロファイル スクリプト
サーバーが正しく構成されているかどうか、および個別のデバイス割り当てを使用してどのデバイスを通過できるかを識別するには、SurveyDDA.ps1を実行 します。 PowerShell スクリプト。
スクリプトを使用する前に、Hyper-V の役割がインストールされていることを確認し、管理者特権を持つ PowerShell コマンド ウィンドウからスクリプトを実行するようにしてください。
システムが個別のデバイス割り当てをサポートするように正しく構成されていない場合、ツールは問題に関する詳細を含むエラー メッセージを表示します。 システムが正しく構成されている場合、ツールは PCIe Bus 上のすべてのデバイスを列挙します。
検出されたデバイスごとに、個別のデバイス割り当てで使用可能かどうかがツールに表示されます。 デバイスが個別のデバイス割り当てと互換性がないと識別された場合、スクリプトは理由を表示します。 デバイスに互換性があると識別された場合、デバイスのロケーション パスが表示されます。 さらに、そのデバイスに MMIO 領域が必要な場合も表示されます。