Proxmox VE 8.3: Windows 11 vGPU (VT-d) Passthrough with Intel Alder Lake
https://www.derekseaman.com/2024/07/proxmox-ve-8-2-windows-11-vgpu-vt-d-passthrough-with-intel-alder-lake.html
Windows 11 Installation以降
mmcblk0 のほかに mmcblk0boot0 / mmcblk0boot1(各 4MiB)に見える。これはブート領域で、パーティションとして使うものではない。触らない。https://qiita.com/flathill/items/01321c48bdf8022fa37e
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js の判定を無効化する、というのがリンク先の内容だ。apt upgrade で proxmox-widget-toolkit が更新されたら、また同じ手当てをする。やってるのはここの手順。
github : strongtz / i915-sriov-dkms
pve-headers-$(uname -r)(カーネルヘッダ)、build-essential、dkms、mokutil、sysfsutils、git だ。sysfsutils は後の sysfs.conf で使う。pve-headers もカーネルに合わせて入れ直す。版数がずれていると dkms のビルドが通らない。mokutil はそのために入れる。# apt install pve-headers-$(uname -r) build-essential dkms mokutil sysfsutils git
# git clone https://github.com/strongtz/i915-sriov-dkms.git
KERNEL=$(uname -r); KERNEL=${KERNEL%-pve} で、6.5.11-8-pve から -pve を落として 6.5.11-8 を作っている。dkms.conf の PACKAGE_VERSION をこの値に揃えるためだ。@_PKGBASE@ と @PKGVER@ はプレースホルダ。sed でパッケージ名 i915-sriov-dkms とカーネル版数に置き換える。cat で中身を確認し、PACKAGE_VERSION が自分のカーネル版数(-pve を外したもの)になっているか目視で確かめる。# KERNEL=$(uname -r); KERNEL=${KERNEL%-pve}
# sed -i 's/"@_PKGBASE@"/"i915-sriov-dkms"/g' ~/i915-sriov-dkms/dkms.conf
# sed -i 's/"@PKGVER@"/"'"$KERNEL"'"/g' ~/i915-sriov-dkms/dkms.conf
# cat ~/i915-sriov-dkms/dkms.conf
PACKAGE_NAME="i915-sriov-dkms"
PACKAGE_VERSION="6.5.11-8"
MAKE[0]="make -C ${kernel_source_dir} M=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build KVER=${kernelver}"
CLEAN="make -C ${kernel_source_dir} M=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build KVER=${kernelver} clean"
BUILT_MODULE_NAME[0]="i915"
DEST_MODULE_LOCATION[0]=/kernel/drivers/gpu/drm/i915
AUTOINSTALL=yes
dkms add
※ ???????部は、実際のファイル名に合わせる
# cd ~/i915-sriov-dkms/
# dkms add .
# cd /usr/src/i915-sriov-dkms-???????
# dkms status
dkms build install
※ ???????部は、実際のファイル名に合わせる
# dkms install -m i915-sriov-dkms -v ??????? -k $(uname -r) --force -j `nproc`
Sign command: /lib/modules/6.5.11-8-pve/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub
Building module:
Cleaning build area...
make -j4 KERNELRELEASE=6.5.11-8-pve -C /lib/modules/6.5.11-8-pve/build M=/var/lib/dkms/i915-sriov-dkms/6.5.11-8/build KVER=6.5.11-8-pve............................................................................................
Signing module /var/lib/dkms/i915-sriov-dkms/6.5.11-8/build/i915.ko
Cleaning build area...
i915.ko:
Running module version sanity check.
- Original module
- This kernel never originally had a module by this name
- Installation
- Installing to /lib/modules/6.5.11-8-pve/updates/dkms/
depmod...
intel_iommu=on iommu=pt は Intel の VT-d を有効にする指定。SR-IOV の VF を VM に渡すのに要る。i915.enable_guc=3 は GuC(GPU のスケジューラ)を有効にする。SR-IOV の PF モードには必須だ。i915.max_vfs=7 は作れる VF の上限。N100 の iGPU では 7 まで、という意味だ。intel_idle.max_cstate=1 などは既存設定なので消さない。追記する形で1行にまとめる。update-grub だけでは足りない。update-initramfs -u -k all まで実行してから再起動する。$ nano /etc/default/grub
GRUB_CMDLINE_LINUX="iommu=pt intel_iommu=on i915.enable_guc=3 i915.max_vfs=7"
update-grub, initramfs 更新
# update-grub
# update-initramfs -u -k all
sysfs.conf に追記
sriov_numvfs = 2 は起動時に作る VF の数。i915.max_vfs=7 は上限なので、実際に使う数だけ sriov_numvfs に書く。2 なら iGPU を 2 つの VM に分けられる。0000:00:02.0 にあることが多く、lspci で確認できる。sysfsutils が入っていれば、/etc/sysfs.conf の1行で再起動後も自動で VF が作られる。手動なら echo 2 > /sys/.../sriov_numvfs でもよいが、再起動で消える。# echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 2" > /etc/sysfs.conf
reboot
# reboot
dmesg
# dmesg | grep i915
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.5.11-8-pve root=/dev/mapper/pve-root ro intel_idle.max_cstate=1 processor.max_cstate=1 cpufreq.default_governor=performance iommu=pt intel_iommu=on video=efifb:off i915.enable_guc=3 i915.max_vfs=7 quiet
[ 0.070552] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.5.11-8-pve root=/dev/mapper/pve-root ro intel_idle.max_cstate=1 processor.max_cstate=1 cpufreq.default_governor=performance iommu=pt intel_iommu=on video=efifb:off i915.enable_guc=3 i915.max_vfs=7 quiet
[ 3.435960] i915: module verification failed: signature and/or required key missing - tainting kernel
[ 4.115709] i915 0000:00:02.0: Running in SR-IOV PF mode
[ 4.116313] i915 0000:00:02.0: [drm] VT-d active for gfx access
[ 4.116340] i915 0000:00:02.0: vgaarb: deactivate vga console
[ 4.116410] i915 0000:00:02.0: [drm] Using Transparent Hugepages
[ 4.116814] i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 4.119663] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/adlp_dmc.bin (v2.20)
[ 4.119791] mei_hdcp 0000:00:16.0-b638ab7e-94e2-4ea2-a552-d1c54b627f04: bound 0000:00:02.0 (ops i915_hdcp_ops [i915])
[ 4.130395] i915 0000:00:02.0: [drm] GT0: GuC firmware i915/tgl_guc_70.bin version 70.13.1
[ 4.130403] i915 0000:00:02.0: [drm] GT0: HuC firmware i915/tgl_huc.bin version 7.9.3
[ 4.135982] i915 0000:00:02.0: [drm] GT0: HuC: authenticated for all workloads!
[ 4.136431] i915 0000:00:02.0: [drm] GT0: GUC: submission enabled
[ 4.136433] i915 0000:00:02.0: [drm] GT0: GUC: SLPC enabled
[ 4.136921] i915 0000:00:02.0: [drm] GuC RC: enabled
[ 4.139594] mei_pxp 0000:00:16.0-fbf6fcf1-96cf-4e2e-a6a6-1bab8cbe36b1: bound 0000:00:02.0 (ops i915_pxp_tee_component_ops [i915])
[ 4.139861] i915 0000:00:02.0: [drm] Protected Xe Path (PXP) protected content support initialized
[ 4.197366] [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 0
[ 4.199293] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[ 4.199523] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[ 4.199631] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[ 4.199682] i915 0000:00:02.0: 7 VFs could be associated with this PF
PF modeで動いていることを確認。 7VF使えるらしい。
Running in SR-IOV PF mode が出ていれば、ホスト側の iGPU が PF(親)として動いている。VM に渡すのは VF(子)側になる。7 VFs could be associated with this PF は「最大 7 個まで子を作れる」の意味。実際に作る数は sriov_numvfs で決める。i915: module verification failed は署名なしで読み込んだという通知だ。Secure Boot の状態によって出るが、動いていれば致命的ではない。snd_hda_intel ... bound や Cannot find any crtc or sizes は、ホスト側に画面出力が無い構成でよく出る。SR-IOV の動作自体には影響しない。[ 4.115709] i915 0000:00:02.0: Running in SR-IOV PF mode
[ 4.199682] i915 0000:00:02.0: 7 VFs could be associated with this PF
mkfs.ext4 /dev/nvme0n1 はディスク全体に直接ファイルシステムを作る。パーティションを切っていないので、区切りたい場合は先に fdisk や parted で切ってから mkfs.ext4 /dev/nvme0n1p1 のように指定する。fstab の1行は デバイス マウント先 形式 オプション dump fsck の順だ。ここでは defaults 0 0。mount -av は fstab の全エントリをマウントし、結果を1行ずつ表示する。エラーが出たら fstab の記述を確認する。/mnt/nvme を VM/CT のマウントポイントとして使う。/etc/pve/storage.cfg に dir ストレージとして足すと GUI から見える。fdisk -l
Disk /dev/nvme0n1: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: Netac NVMe SSD 250GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: FAC57AD3-8C68-46AB-93CD-B897031E3BCC
Disk /dev/mmcblk0: 58.25 GiB, 62545461248 bytes, 122159104 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A33C8885-88D4-420F-93B0-C818CB00B034
Device Start End Sectors Size Type
/dev/mmcblk0p1 34 2047 2014 1007K BIOS boot
/dev/mmcblk0p2 2048 1050623 1048576 512M EFI System
/dev/mmcblk0p3 1050624 122159070 121108447 57.7G Linux LVM
Disk /dev/mmcblk0boot0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mmcblk0boot1: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/pve-swap: 7.13 GiB, 7650410496 bytes, 14942208 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/pve-root: 24.65 GiB, 26470252544 bytes, 51699712 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
mkfs.ext4 /dev/nvme0n1
mkdir /mnt/nvme
nano /etc/fstab
nano /etc/fstab
/dev/nvme0n1 /mnt/nvme ext4 defaults 0 0
mount -av
https://www.michaelstinkerings.org/gpu-virtualization-with-intel-12th-gen-igpu-uhd-730/
※ 本ページのAmazonリンクにはアフィリエイトタグ(toobf6-22)が付いている。
🤖 このページにはAIエージェント(ノア)による編集・加筆が含まれます。内容の正確性は保証できないため、重要な判断は一次情報でご確認ください。