• Skip to content
  • Skip to primary sidebar

なしっぺのITブログ

主にネットワーク機器に関する雑記帳

Header Right

dTop / Hyper-V

Hyper-V仮想マシンでDDAを利用したGPUパススルー

f i tA: 2018-03-26 C: 0 件のコメント

Windows Server 2016における新機能の一つに、Hyper-V仮想マシンにおけるDiscrete Device Assignment(DDA)の対応があります。DDAの実装により、Hyper-V上の仮想マシンでPCIeデバイスを利用できるようになります。本記事は、WS2016上のHyper-V仮想マシンで、GPUパススルーを試した記録です。クライアントHyper-V(Windows 10)でDDAが利用可能かどうかは未検証です。

目次

  • 1 概要
    • 1.1 RemoteFX vs DDA
    • 1.2 DDAの利点
    • 1.3 DDAの動作環境
  • 2 作業手順
    • 2.1 ゲスト側の作業
    • 2.2 ホスト側の作業
    • 2.3 ドライバのインストール
  • 3 まとめ
  • 4 参考URL

概要

RemoteFX vs DDA

DDAでGPUパススルーをするにあたって、おそらく一番の疑問はRemoteFXと何が違うの?ということです。詳しい記事はそのうち書きたいと思いますが、簡略化するとRemoteFXはGPUを仮想化して一つのGPUを複数の仮想マシンで共有するのに対し、DDAは一つのGPUを一つの仮想マシンで割り当てて占有することを可能にするテクノロジーとなります。

DDAの利点

RemoteFXを利用する場合、仮想マシンは仮想化されたGPUにアクセスしますが、DDAの場合はGPUに直接アクセスします。従ってGPU仮想化のオーバーヘッドを抑えることが出来るため、ネイティブ環境に劣らないパフォーマンスを出すことが出来ます。DDAの場合はゲスト側にベンダーのドライバを導入する必要があり、使用するGPUのドライバがDDAをサポートする必要があります。

DDAの動作環境

Microsoft社による解説ページによると、DDAを利用するには

  • Intel VT-xとIntel EPT、もしくはAMD-VとAMD NPTをサポートする64ビットCPU
  • 割り込み再マッピングとDMA再マッピングをサポートするIntel VT-Dか、AMD IOMMUをサポートするチップセット
  • Access Control Services(ACS)をサポートするPCI Expressルートデバイス

が必須とあります。ページにもあるように、Single Root I/O Virtualization(SR-IOV)をサポートする環境であれば、問題ないように思えます。

作業手順

ゲスト側の作業

  1. あらかじめGPUを追加する仮想マシンをシャットダウンしておく。

  2. Hyper-Vマネージャから仮想マシンの自動停止アクションを『シャットダウン』に変更する。

  3. 動的メモリが有効な場合、最小メモリサイズがRAMサイズの設定と一致しているか確認する。

  4. RemoteFXを利用している場合は、仮想GPUを削除しておく。

ホスト側の作業

  1. サーバーをシャットダウンして、GPUを取り付ける。

  2. サーバーを起動後、管理者権限をもつPowershellコンソールを開く。

  3. 以下のコマンドで、GPUに対応するインスタントID(デバイスID)を探す。

    Get-PnpDevice -PresentOnly | where {$_.InstanceID -like 'PCI*'} | select InstanceID,FriendlyName | sort FriendlyName

    →対応する名前のデバイスが見つからない場合、”Microsoft 基本ディスプレイ アダプター”を確認。

  4. 該当しそうなデバイスが見つかったら、PCI ID RepositoryにベンダーID(VEN_以降の4桁コード)とデバイスID(DEV_以降の4桁コード)を入力して、パススルーしたいデバイスかどうか確認する。

    →今回使用したのはATI FirePro V4800なので、ステップ3で選択したデバイスが正しかったことがわかる。

  5. インスタンスID(PCI…から最後の4桁コードまで全部)を適当な変数に代入しておく。

    $deviceID = '見つけたインスタンスID'

  6. インスタンスIDを使って当該デバイスのロケーションパスを取得、適当な変数に代入する。

    $locationPath = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceID $deviceID).Data[0]

  7. GPUをホスト上で無効化する。以下のコマンドを入力後、エンターキーを入力して続行。

    Disable-PnpDevice -InstanceId $deviceID

  8. GPUをホストからアンマウント。

    Dismount-VMHostAssignableDevice -force -LocationPath $locationPath

  9. GPUを仮想マシンに割り当てる。

    Add-VMAssignableDevice -VMName '仮想マシンの名前' -LocationPath $locationPath -Verbose

  10. 全てのコマンドが正しく実行されている場合は、以下のようなアウトプットになると思います。

ドライバのインストール

  1. 通常通りに仮想マシンを起動する。

  2. 以上の作業が成功していれば、デバイスマネージャからパススルーされたGPUが確認できるはず。

  3. 対応するドライバを仮想マシンにインストールする。

  4. 無事ドライバが導入されていればGPUは自動的に認識されるはずだが、コード31を返して動作しません(理由は後述)。

まとめ

DDAによって問題なくGPUパススルー出来ましたが、残念ながらゲスト側でドライバが動作しませんでした。AMDのこちらのスレッドによると、AMDのFireProドライバはDDAをサポートしていないとのことです。対応する新ドライバは2018年初頭にリリース予定とのことですが、2018年1月の時点においてまだ開発中のようです。今回試したV4800は古く対応されるかわかりませんが、新ドライバがリリースされたらFirePro WシリーズのGPUも試してみたいと思います。

このエントリーをはてなブックマークに追加  

参考URL

https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/deploy/deploying-graphics-devices-using-dda
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/plan/plan-for-deploying-devices-using-discrete-device-assignment

オススメの記事

  • Arch LinuxをHyper-V仮想マシンにセットアップする
  • ズルトラ(Xperia Z Ultra) のブートローダをアンロックする
  • OpenWrt/LEDEでリンクアグリゲーション/チーミング設定
  • ズルトラ(Xperia Z Ultra)のTAパーティションをバックアップ
  • > ズルトラ(Xperia Z Ultra)をAndroid 7.1....
    < OpenWrt/LEDEでタグVLANを使う
    ↑

    DHyper-V THowTo, FirePro, GPU仮想化, WS2016, WIndows Server

    Reader Interactions

    cコメントを残す コメントをキャンセル

    メールアドレスが公開されることはありません。

    Primary Sidebar

    目次

    • 1 概要
      • 1.1 RemoteFX vs DDA
      • 1.2 DDAの利点
      • 1.3 DDAの動作環境
    • 2 作業手順
      • 2.1 ゲスト側の作業
      • 2.2 ホスト側の作業
      • 2.3 ドライバのインストール
    • 3 まとめ
    • 4 参考URL

    カテゴリー

    • Android (3)
    • Hyper-V (2)
    • Linux (2)
    • Windows (3)
    • ネットワーク (5)
      • OpenWrt (2)
      • RTXシリーズ (3)
    • ホスティング (1)
    • 無線技術関係 (1)

    アーカイブ

    • 2019年1月 (1)
    • 2018年6月 (1)
    • 2018年5月 (1)
    • 2018年4月 (3)
    • 2018年3月 (10)

    © 2019 なしっぺ (nashippe)

    m連絡フォーム Pプライバシーポリシー rFeed

    当ブログの内容、文章、画像等の無断転載・使用を固く禁じます。
    また、許可なく各種まとめサイト(NEVERまとめ、Qiitaなど)への転載はご遠慮ください。