KVM GPUパススルー設定

環境

やりたいこと

  • KVM上のWindowsGPUをパススルーで接続する
    • 現在GPUはcuda計算用に利用 (ディスプレイはi915).Windowsを使うときだけパススルーさせたい

手順

archのwikiに丁寧書いてあります.

以下,自分がやった方法

事前準備

  • デフォルトだとxenialのapt repositoryのlibvirtのバージョンが古いので,ppa:jacob/virtualisationを追加しておく
  • grubのエントリにiommu=pt intel_iommu=onを追加
  • qemu, libvirt, ovmf, virt-managerあたりのインストール
  • libvirtd, virtlogd serviceをenable

Windowsインストール

<os>
...
     <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE-pure-efi.fd</loader>
...
</os>
<features>
    <hyperv>
        ...
        <vendor_id state='on' value='whatever'/>
        ...
    </hyperv>
    ...
    <kvm>
    <hidden state='on'/>
    </kvm>
<feature>
  • virtual displayなど,不要なデバイスを削除
    • これをしないとwindowsを起動させてもTian coreのロゴの画面から先に進まなかった
  • windowsを起動後,nvidiaのドライバをインストール
    • なお,virsh start で起動したら事前にvfio-pciドライバをデバイスに割り当てなくても,自動で割り当ててくれた.また,virsh shutdownをした場合自動的にドライバは元のドライバに戻った.(virt suspendではvfio-pciのまま)
    • キーボードやマウスを使うには,それらを接続したUSBが繋がっているPCIスロットをパススルーさせる.あるいはsynergyのようなソフトウェアを利用する
      • 自分はそもそも普通別端末からsshで作業するので,PC本体のUSBはwindows側でパススルーさせた
      • オーディオなども必要に応じてパススルー
        • 自分はUSBのbluetoothアダプタをパススルーで接続してそれ経由で利用

結果

なんかインストール時に微妙にはまったりしたけど無事に動きました\(^o^)/