Proxmox上で稼働するVMにN100をパススルーする
TL;DR
- BIOSからVT-d関連の設定を有効にする
/etc/default/grubでGRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"する- 管理画面からRaw Deviceの
UHD GraphicsをVMに割り当て - VMを再起動して
lspciで認識されていることを確認
はじめに
最近録画鯖を再構築したのですが、ffmpegでエンコードさせているとCPUが限界を迎えてしまうので、QSVEncCに変更します。
対象のシステムはproxmox上のVMに構築されているk8s上で稼働しているため、まずはVMまでパススルーすることを目指します。
Kernelバージョンが低い場合(6.1以下?)にドライバが利用出来ないことがあるため、古い場合は先にそちらを更新する必要があります。
環境
- Proxmox 8.1.3
- 4 x Intel(R) N100 (1 Socket)
- Ubuntu 22.04.3 LTS
- 6.8.0-124-generic
BIOSの設定変更
BIOSの設定画面からVT-dを有効にします。
今回の中華ミニPCには設定可能な項目の中には見つからなかったのですが、サポートされているCPUだったのでひとまず先に進みました。
Proxmoxの設定変更
後述するデバイスの割り当てを実施しようとした際に No IOMMU detected, please activate it.See Documentation for further information. と出てくるためgrubの設定を追加します。
/etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT に追記します
1- GRUB_CMDLINE_LINUX_DEFAULT="quiet"
2+ GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
grubの設定を更新します。
1update-grub
一度再起動しておきます
VMの設定変更
対象のVMをシャットダウンして、
Virtual Machine -> 対象のVM -> Hardware へ移動してAddから追加します。
Raw Deviceの中にある UHD Graphics を選択します。
VMを再起動しておきます。
もし、起動しない場合は以下でログを見ると原因があるかもしれません。
自分の場合は今回の変更でoom-killされるようになっていたのでVMの設定を修正しました。
1journalctl -n 50 --no-pager | grep -i qemu
VMで認識していることを確認
i915を利用していることを確認します。
1sky@base:~$ lspci -v -s 00:10.0
200:10.0 VGA compatible controller: Intel Corporation Device 46d1 (prog-if 00 [VGA controller])
3 Subsystem: Device 1e50:8023
4 Physical Slot: 16
5 Flags: bus master, fast devsel, latency 0, IRQ 39
6 Memory at fd000000 (64-bit, non-prefetchable) [size=16M]
7 Memory at e0000000 (64-bit, prefetchable) [size=256M]
8 I/O ports at f040 [size=64]
9 Expansion ROM at 000c0000 [disabled] [size=128K]
10 Capabilities: <access denied>
11 Kernel driver in use: i915
12 Kernel modules: i915, xe
vainfoとintel-gpu-toolsをインストールします。
インストール後再起動しておきます。
1sudo apt-get install vainfo intel-gpu-tools
再起動後にそれぞれコマンドが動作することを確認します。
1vainfo | head -n 10
2error: can't connect to X server!
3libva info: VA-API version 1.14.0
4libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
5libva info: Found init function __vaDriverInit_1_14
6libva info: va_openDriver() returns 0
7vainfo: VA-API version: 1.14 (libva 2.12.0)
8vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.3.1 ()
9vainfo: Supported profile and entrypoints
10 VAProfileNone : VAEntrypointVideoProc
11 VAProfileNone : VAEntrypointStats
12 VAProfileMPEG2Simple : VAEntrypointVLD
13 VAProfileMPEG2Simple : VAEntrypointEncSlice
14 VAProfileMPEG2Main : VAEntrypointVLD
15 VAProfileMPEG2Main : VAEntrypointEncSlice
16 VAProfileH264Main : VAEntrypointVLD
1sudo intel_gpu_top
2intel-gpu-top: 8086:46d1 @ /dev/dri/card1 - 0/ 0 MHz; 0% RC6; 0 irqs/s
3 ENGINES BUSY MI_SEMA MI_WAIT
4 Render/3D 0.00% | | 0% 0%
5 Blitter 0.00% | | 0% 0%
6 Video 0.00% | | 0% 0%
7 VideoEnhance 0.00% | | 0% 0%
その他
おそらく直接関係はないと思われるが、試したことのメモ書き
i915のドライバが利用されない
Kernelが古いとドライバが利用できないため更新します。
1sudo apt install --install-recommends linux-generic-hwe-22.04 -y
以下も一応実施したのですが、おそらくKernel更新して解決したと思われるのでメモ程度に
etc/modprobe.d/i915.conf に以下を追記
1options i915 enable_guc=3
2options i915 enable_fbc=1
initramfsを更新して再起動
1sudo update-initramfs -u
2sudo reboot
ProxmoxでiGPUを掴まないようにする
/etc/modprobe.d/pve-blacklist.conf に以下を追記
1blacklist i915
2blacklist intel_agp
3options kvm ignore_msrs=1
4options vfio_pci disable_vga=1
更新して再起動
1update-initramfs -u -k all
2reboot