ソースの表示以前のリビジョンバックリンク全て展開する/折り畳む文書の先頭へ Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit Teams最近の変更Send via e-Mail印刷パーマリンク × 目次 Proxmox VE 8.0でIntel N100のiGPUをSR-IOVしてみる 試した環境 手順 SR-IOV対応のカーネルモジュールの作成 PCIパススルーの準備 VMの設定 備考 参考サイト Proxmox VE 8.0でIntel N100のiGPUをSR-IOVしてみる Intel CPUの内蔵GPUは第12世代、すなわちXe Graphicsから何とSR-IOVに対応しているらしい。従来のIntel iGPUの仮想化はGVT-gの調停デバイスを介したもので、お膳立てがちょっと面倒だった(それでもvGPUが使えるだけで神なわけだけど)。SR-IOVならVF生やしてVMにパススルーするだけなのでとっても楽になる。 手元に丁度Intel N100のマシンがあるので実際に試してみた。 N100のiGPUはUHD Graphicsじゃないかって? 確かにその通り。製品仕様もOSからの認識もUHD Graphicsである。ところが、lspci -vで見てみると燦然と輝くCapabilities: [320] Single Root I/O Virtualization (SR-IOV)の文字が飛び込んでくる。 これはもう試してみるっきゃないでしょー。 試した環境 CHUWI LarkBox X 2023 ホスト Proxmox VE 8.0.3 Linux kernel 6.2.16-3-pve (x86_64) Root on ZFSな環境 strongtz/i915-sriov-dkms db4e8ccd9bd31fad79361e27afc032487426fe6a か 31d24b38b2ac2c05e4491ea7ab1578af4a5f7566 ゲスト Windows 11 22H2 ビルド22621.2283 Intel Graphics Driver 31.0.101.4146 (gfx_win_101.4146.exe) 2023-09-18現在、ドライバは未成熟なのでホストのLinuxカーネルバージョン、ホスト側ドライバ、ゲスト側ドライバの組み合わせが結構シビアな点には注意されたい。 手順 SR-IOV対応のカーネルモジュールの作成 標準のi915カーネルモジュールは今のところSR-IOV未対応である。有志によって開発されているSR-IOV対応版をビルドして使う必要がある。 必要なパッケージを入れる。 # apt install pve-headers-$(uname -r) build-* dkms unzip sysfsutils ソースコードを取得して展開。 # wget https://github.com/strongtz/i915-sriov-dkms/archive/refs/heads/master.zip # unzip master.zip dkms.confのPACKAGE_NAMEとPACKAGE_VERSIONを以下のように書き換える。 Linux分からんマンなので、バージョン番号のあるべき姿が分からんのだけど、とりあえずカーネルバージョンに合わせておいた。 # cat i915-sriov-dkms-master/dkms.conf PACKAGE_NAME="i915-sriov-dkms" PACKAGE_VERSION="6.2" ソースコードを所定の場所に移動してビルド。 # mv i915-sriov-dkms-master /usr/src/i915-sriov-dkms-6.2 # dkms install --force -m i915-sriov-dkms -v 6.2 PCIパススルーの準備 カーネルコマンドラインに設定を追加する。 ext4(とbrtfsも?)な人は/etc/defaults/grubのGRUB_CMDLINE_LINUX_DEFAULTをいじってください。 # cat /etc/kernel/cmdline root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on i915.enable_guc=3 i915.max_vfs=2 N100の場合、VFは最大4つ作れるっぽいが、それだけリソースを浪費するのでほどほどに。 カーネルコマンドラインを反映して再起動。GRUBな人はupdate-grubしてください。 # pve-efiboot-tool refresh # update-initramfs -u -k all # reboot 再起動後、iGPUがPFモードで動作し、VFが作られてれば大成功。 # dmesg | grep i915 [ 3.803063] i915 0000:00:02.0: Running in SR-IOV PF mode [ 3.849960] i915 0000:00:02.0: 2 VFs could be associated with this PF VFが生えていることも確認できる。 # lspci | grep VGA 00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics] ←PF 00:02.1 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics] ←VF 00:02.2 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics] ←VF sysfs経由で動的にVFの数を変えることもできる。 # echo 0 > '/sys/bus/pci/devices/0000:00:02.0/sriov_numvfs' # dmesg | grep -E 'i915.+VFs' [81209.898868] i915 0000:00:02.0: Disabled 2 VFs # echo 4 > '/sys/bus/pci/devices/0000:00:02.0/sriov_numvfs' # dmesg | grep -E 'i915.+VFs' [81328.231346] i915 0000:00:02.0: Enabled 4 VFs VMの設定 後はもう何も難しいことはなく、VMの設定でiGPUのVFをVMに追加し、ゲストのWindows側でふつーにドライバを入れるだけ。 RDPの解像度の関係で見切れちゃってるけど、FFベンチもばっちり動くよ!絶対性能が足りてないので重いけど。 備考 冒頭で書いたとおり、カーネルとドライバの組み合わせが結構シビアで、当初はエラーコード43で正しく動かなかった。 試した組み合わせでも一部の3Dアプリケーションは正しく動かない(DQ10ベンチとか) またQSVもダメっぽい VFがアクティブになると1VFにつき2GB弱のメモリが持っていかれる模様。メモリ12GBのLarkBoxだと大分カツカツ 参考サイト GPU Support - Open-IOV strongtz/i915-sriov-dkms: dkms module of Linux i915 driver with SR-IOV support vGPU (SR-IOV) with Intel 12th Gen iGPU I915 driver with SR-IOV on 13th Gen i7-13700 - Software & Operating Systems / Linux - Level1Techs Forums virtualization/proxmox_ve_8_0_how_to_use_n100_vgpu.txt 最終更新: 2023-09-18 23:19by Decomo