2017年1月2日月曜日

ゲストにPCIパススルー(IOMMU有効化)

Ubuntuメインの環境にしようと思っても、やっぱりWindowsの便利なツールは手放せない。
更に、自分が使っているデジイチ等、Windows用のアプリしか無いものも多い。
Windowsゲームもやりたい。
そのため、KVMのゲストOSにWindowsを入れるが、KVMのグラフィック機能ではゲームが楽しめない。多分、Blu-Rayディスクも再生させるのが難しいだろう。

そこで出て来るのがPCIパススルーだ。
その名の通り、PCIデバイスをゲストOSにそのまま渡す、という仕組みだ。

実は今回のPCリフレッシュで、PCI Expressのグラフィックボードも搭載している。GeForceの1060を搭載したグラボだ。
(実はこのために、今はCPU搭載GPUのみを使用している。)

lspciコマンドで一応確認してみよう。
(sagittarius) $ sudo lspci
以下の出力が確認できる。
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1c03 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 10f1 (rev a1)

グラボはPCIEスロットの1番に挿しているが、もしかしたら1番ではPCIパススルーは出来ないかもしれない。その場合は付け直しすることにする。

で、グラボを含めたPCIパススルーは…、実は良く分かってない。
ただ、調べてみたら幾らか情報はある。
このあたりの情報を参考に、色々試してみる。
OVMF による PCI パススルー
QEMU-KVMでGPUと光学ドライブをパススルーしてWindowsゲストを快適に走らせる
KVM PCIパススルー (PCI PassThrough)
CentOS7 KVMでPCIパススルー(GPU含む)
Ubuntu 12.04LTS + kvmでPCIパススルー
Linux - PCI-PassThrough

どうやら、UEFIでvt-dを有効にするだけじゃなく、カーネルブートオプションでIOMMUなるものを有効にする必要があるらしい。
ブートオプションなので、カーネルの再ビルド等は不要だ。
念のため、事前の情報を取得しておこう。

(sagittarius) $ cd
(sagittarius) $ dmesg | grep -i iommu > iommu.before
(sagittarius) $ cat iommu.before
[ 0.057006] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
自分の環境だと、この1行だけしか出力されなかった。

これに対して、IOMMUを有効にしたらどうなるのだろうか?
どうやら、/etc/default/grubをいじるらしい。
(sagittarius) $ sudo vi /etc/default/grub
12行目あたり、GRUB_CMDLINE_LINUX=""になっていると思う。
これを、GRUB_CMDLINE_LINUX="intel_iommu=on"に書き換えて保存する。

反映させるためには、update-grub2を実行するようだ。
(sagittarius) $ sudo update-grub2

ブートパラメータなので、OS再起動させないと反映されないはず。
(sagittarius) $ sudo shutdown -r now

再起動してきたら、ログインして念のためにdmesgにエラーが無いか確認しておこう。
(sagittarius) $ dmesg | less

で、先程と同様に、iommu関連のログを取得してみる。
(sagittarius) $ cd
(sagittarius) $ dmesg | grep -i iommu > iommu.after
(sagittarius) $ cat iommu.after
先程は1行だったのが、今度は大量に出た。
そのうち1行、以下の行が出ているのを確認する。
[ 0.000000] DMAR: IOMMU enabled
これが出ていれば、IOMMUは有効になっているはずだ。

とりあえずIOMMU有効化は終わり。
次はPCIデバイスのグループ確認かな?

0 件のコメント:

コメントを投稿