ESXiのGPUパススルー設定(vSphere VMDirectPath I/O)でVM上でGPUを利用させる

ESXiサーバのGPUをPCI passthough(vSphere VMDirectPath I/O)でVMがGPUを使えるように設定を行いました。必要な設定内容など紹介したいと思います。

VMでGPUを使う背景

最近始めたYouTubeのゲームのプレイ動画は、キャプチャーボードで動画を保存しています。
キャプチャボードは基本的にはPCに接続し、専用ソフトで録画を行うのですがキャプチャーボードのためだけにパソコンを起動…という事は面倒だなと思い、「ならば常に稼働させているサーバで録画出来ないか?🤔」と考えました。
録画するソフトウェアによりますが、私が使っているのはAvermediaのRECentralというソフトウェアでGPU処理が必要となります。このため仮想化環境でキャプチャボードで録画出来るように、今回vSphere VMDirectPath I/Oを使ってGPUパススルーの設定を行いました。

vSphere VMDirectPath I/Oの設定

ESXiホスト側の設定

GPUパススルーさせるESXiホストの、「設定」→「PCIデバイス」から「パススルーの構成」でパススルーさせるデバイスの指定を行います。 前提条件として、ホストのBIOSでVT-d or IOMMUの有効化が必要です。 vCenter上の設定です。

VM側の設定

VMの「設定の編集」→「新規デバイスを追加」→「PCIデバイス」でGPUをアタッチします。

詳しくはVMwareのサイトに記載されています。

vmxのパラメータ設定

追加でVMに対し、vmxのパラメータ設定が必要となります。
vmxの編集は

  • Datastoreのvmxファイルを直接編集
  • VMの「設定の編集」→「仮想マシン オプション」→「詳細」→「構成パラメータ」の設定の編集

から可能です。

hypervisor.cpuid.v0=FALSE
pciPassthru0.msiEnabled=FALSE
pciPassthru1.msiEnabled=FALSE

MSIの設定を行わない場合、アプリケーション稼働時にBSoD😇

当初MSIの設定は行っていなかったのですが、この場合アプリケーションは稼働するものの、キャプチャを開始した瞬間などに上記BSoDになるなど苦戦しました😇 ちなみに svga.present=FALSEとするとリモートコンソールが無効化され、GPUからの画面出力に限定されますが、VMRCなどのコンソールがすべて使えなくなります。GPUパススルーの設定として必要なければTRUEのまま、コンソールは有効化しておいた方が良いです。 上記設定を行ったうえで、GPUのドライバインストールを行えばGuest OS側でGPUを認識するはずです。画面に変化がない場合にはGPUの画面出力側をプライマリディスプレイに変更するなど、OS側の設定を行うと画面が表示されます。(ここもはまりどころ😇)

Guest OS側でGPUが認識される

VMの操作

GPUパススルーを行うと、GPUの画面出力またはコンソール(svga.present=TRUEの場合)の出力となります。GPU描画系のソフトウェアはリモートデスクトップで利用出来ないように、基本的にはGPUからの画面出力の画面を見て、操作を行うことになります。コンソールを有効化している場合には、マウスとキーボードはVMRC経由で操作を行えますが、コンソールを無効化している場合にはマウスとキーボードもパススルーさせ、操作する必要があります。以下を参照すればESXiサーバに接続されたマウス、キーボードをVMにアタッチし、GPUパススルーした画面を見ながら操作が可能になります。

How to passthrough USB Keyboard/Mouse HID and CCID devices to VM in ESXi?

GPUパススルーを行うと

  • ホスト再起動時、パススルーさせたGPUがESXiのプライマリとなっている場合にはPCIパススルーの構成設定からチェックが外れます。
    • 恐らくこちらの設定を行えば回避できると思う..
  • PCIパススルーされたVMのメモリはリザーブされます。
  • KB2142307 に記載の通り、vMotion, Fault Toleranceなどは使えなくなります。
  • GPUをESXiのコンソール出力で利用していた場合、パススルーを構成したVMが起動するとESXiのコンソール出力は消えます
    • ESXiのコンソールはsshのdcuiで代用可能なので、そこまで影響はないと思います

まとめ

今回vSphere VMDirectPath I/Oを使ったGPUパススルーの設定方法を紹介しました。
vMotion等の制約はパススルーという性質上、制限されますがそれ以上にGPUリソースを使うサーバの集約化が出来るのでメリットは大きいと思います。とりあえずサーバのGPUはローエンド…ではなく、ハイエンドのGPUを選定してパススルーで活用するのが良さそうです🤔 最近だとBitfusionもありますし
キャプチャボードの仮想化環境での録画は他にUSBのパススルーも必要だったりするのですが、そちらについてはキャプチャボードのレビュー記事で紹介したいと思います。ちなみにパススルーさせた動画は以下の通り快適に録画出来ています😄

Share Comments
comments powered by Disqus