Introduction
衆所周知,Intel在第五代到第十代Core處理器(代號Broadwell到Comet Lake)上推出了Intel GVT-g技術,可以將內顯GPU切分爲幾個虛擬化VF,從而將虛擬化的VF直通給KVM虛擬機,提升虛擬機的性能(雖然Intel內顯的圖形效能口碑巨爛,但是總比QXL和VirtIO強一點……)
然而,在11代之後,內顯的架構升級到了Xe Graphics,竟然不支援iGVT-g技術了,取而代之的是SR-IOV特性。但是支援內顯SR-IOV特性的Linux核心至今沒有merge到Linux核心的主線,僅僅存在於Intel的custom核心。
然而,得益於Github大佬strongtz的努力,一款DKMS核心模組被提取了出來。雖然該模組之前是爲了Proxmox VE平臺準備的,但是對於Archlinux仍然可以使用。這就讓我們這篇筆記成爲了可能。
主機配置
- OS: Archlinux
- Display: Wayland
- WM: Hyprland
- CPU: 11th Gen Intel i5-11300H (8) @ 4.400GHz
- GPU1: Intel TigerLake-LP GT2 [Iris Xe Graphics]
- GPU2: NVIDIA GeForce MX450
- Memory: 16GB
配置步驟
降級核心版本到6.6
截止到113年2月8日,模組的作者聲稱該模組支援的核心版本從6.1到6.5,但是在issue我找到了其他人merge到main分支的一個PR,支援到了6.6。我在6.6下測試透過,但是在6.7下編譯失敗。
在Archlinux上,我採用的是將核心從Stable切換到LTS並鎖定pacman版本,因爲我在寫這篇筆記的時候LTS核心的版本恰好是6.6。
當然,你也可以手動編譯核心。
首先安裝LTS核心:
1 | sudo pacman -S linux-lts linux-lts-headers |
然後卸載Stable核心:
1 | sudo pacman -Rscn linux linux-headers |
重新產生grub.cfg:
1 | sudo grub-mkconfig -o /boot/grub/grub.cfg |
重啓電腦,你的核心版本應已經切換到了6.6 LTS。
爲了鎖定核心版本,我們需要禁用核心隨pacman的更新:
1 | sudo vim /etc/pacman.conf |
修改IgnorePkg:
1 | # /etc/pacman.conf |
然後執行:
1 | sudo pacman -Syyu |
安裝dkms模組
首先安裝dkms:
1 | sudo pacman -S dkms |
然後clone模組倉庫:
1 | git clone git@github.com:strongtz/i915-sriov-dkms.git |
進入倉庫,修改dkms.conf檔案,修改PACKAGE_NAME
爲i915-sriov-dkms
, PACKAGE_VERSION
爲6.1
。
將整個倉庫目錄遷移到/usr/src/
:
1 | sudo cp -r i915-sriov-dkms/ /usr/src/i915-sriov-dkms-6.1/ |
安裝這個模組:
1 | sudo dkms install -m i915-sriov-dkms -v 6.1 |
核心將重新開始編譯。
啓用immou
修改/etc/default/grub,加入核心引數:
1 | # /etc/default/grub |
更新grub:
1 | sudo grub-mkconfig -o /boot/grub/grub.cfg |
更新mkinitcpio:
1 | sudo mkinitcpio -p linux-lts |
重新啓動電腦。
建立VF
安裝sysfsutils:
1 | sudo pacman -S sysfsutils |
將最大VF數量寫入檔案:
1 | sudo echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf |
注意,使用
lspci
指令來查看你的內顯是否掛載在0.2.0Bus:
1 lspci |grep VGA
輸出應當如下:00:02.0 VGA compatible controller: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01)
建立VF:
1 | sudo echo 7 > /sys/bus/pci/devices/0000\:00\:02.0/sriov_numvfs |
然後重新使用lspci
:
1 | lspci |grep VGA |
輸出應當如下:
1 | 00:02.0 VGA compatible controller: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01) |
完成。
Trouble Shooting
目前我遇到的最大的問題是:重新啓動電腦後numvfs的數量就被清零。目前沒有找到比較好的方法來解決。只好寫一個script,讓它在啓動Hyprland的時候自動啓動。希望之後可以到到比較好的方法。