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 核心:
然後卸載 Stable 核心:
重新產生 grub.cfg
:
重啓電腦,你的核心版本應已經切換到了 6.6 LTS。
爲了鎖定核心版本,我們需要禁用核心隨 pacman 的更新:
修改 IgnorePkg:
然後執行:
安裝 dkms 模組
首先安裝 dkms:
然後 clone 模組倉庫:
進入倉庫,修改 dkms.conf
檔案,修改 PACKAGE_NAME
爲 i915-sriov-dkms
,PACKAGE_VERSION
爲 6.1
。
將整個倉庫目錄遷移到 /usr/src/
:
安裝這個模組:
核心將重新開始編譯。
啓用 immou
修改 /etc/default/grub
,加入核心引數:
更新 grub:
更新 mkinitcpio:
重新啓動電腦。
建立VF
安裝 sysfsutils:
將最大 VF 數量寫入檔案:
注意,使用
lspci
指令來查看你的內顯是否掛載在 0.2.0Bus:輸出應當如下:
00:02.0 VGA compatible controller: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01)
建立 VF:
然後重新使用 lspci
:
輸出應當如下:
完成。
Trouble Shooting
目前我遇到的最大的問題是:重新啓動電腦後 numvfs 的數量就被清零。目前沒有找到比較好的方法來解決。只好寫一個 script,讓它在啓動 Hyprland 的時候自動啓動。希望之後可以到到比較好的方法。