個別のデバイスの割り当てを使用したデバイスのデプロイの計画
個別のデバイスの割り当てにより、物理 Peripheral Component Interconnect Express (PCIe) ハードウェアに仮想マシン (VM) 内から直接アクセスできます。 この記事では、使用できるデバイスの種類、ホスト システムの要件、VM に適用される制限、およびセキュリティへの影響について説明します。
個別のデバイスの割り当ての場合、Microsoft では、グラフィックス アダプターと NVMe ストレージ デバイスの 2 つのデバイス クラスがサポートされています。 他のデバイスでも動作する可能性が高く、それらのデバイスについては、ハードウェア ベンダーがサポートに関する声明を提供できます。 その他のデバイスについては、特定のハードウェア ベンダーにお問い合わせください。
GPU 仮想化のその他の方法については、「Windows サーバーで GPU アクセラレーションを計画する」を参照してください。 個別のデバイスの割り当てを試す準備ができたら、個別のデバイスの割り当てを使用したデバイスのデプロイに関するページまたは「個別のデバイスの割り当てを使用して NVMe 記憶装置を展開する」に移動できます。
サポートされている VM とゲスト オペレーティング システム
個別のデバイスの割り当ては、第 1 世代または第 2 世代の VM でサポートされています。 サポートされているゲストには次が含まれます。
- Windows 10 以降
- Windows Server 2016 以降
- Azure の個別のデバイスの割り当てサポートを追加する更新プログラムを適用した Windows Server 2012 R2。
詳細については、「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 に同じ機能が必要な場合、[Enable SR-IOV] を設定することが必要な場合があります。BIOS で正しい設定を識別できない場合は、システム ベンダーにお問い合わせください。
ハードウェアが個別のデバイスの割り当てに対応していることを確認するために、Hyper-V 対応ホストでマシン プロファイル スクリプトを実行できます。 このスクリプトでは、サーバーが正しく設定されているかどうか、およびどのデバイスが個別のデバイスの割り当てに対応しているかをテストします。
デバイスの要件
すべての PCIe デバイスで個別のデバイス割り当てを使用できるわけではありません。 レガシ (INTx) PCI 割り込みを利用する古いデバイスはサポートされていません。 詳細については、「Discrete Device Assignment - Machines and devices」を参照してください。 マシン プロファイル スクリプトを実行して、個別のデバイスの割り当てに使用できるデバイスを表示することもできます。
デバイスの製造元は、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 領域を設定するだけで十分です。
重要
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 スペースの詳細については、TechCommunity ブログの「Discrete Device Assignment - GPUs」を参照してください。
マシン プロファイル スクリプト
サーバーが正しく構成されているかどうかと、個別のデバイスの割り当てを使用して渡すことができるのはどのデバイスかを特定するには、SurveyDDA.ps1 PowerShell スクリプトを実行します。
スクリプトを使用する前に、Hyper-V の役割がインストールされていることを確認し、管理者特権を持つ PowerShell コマンド ウィンドウからスクリプトを実行するようにしてください。
個別のデバイスの割り当てをサポートするようにシステムが正しく構成されていない場合、ツールは問題に関する詳細を知らせるエラー メッセージを表示します。 システムが正しく構成されている場合、ツールは PCIe Bus 上のすべてのデバイスを列挙します。
見つけたデバイスごとに、個別のデバイスの割り当てで使用できるかどうかがツールに表示されます。 デバイスが個別のデバイス割り当てと互換性がないとして識別された場合、スクリプトは理由を提供します。 デバイスが互換性のあると正常に識別されると、デバイスのロケーション パスが表示されます。 さらに、そのデバイスに MMIO 領域が必要な場合は、そのことも表示されます。