(本文最後更新時間:2024年8月11日)
前言 Link to heading
自從上次寫有關VFIO的文章已差不多有一年時間,這段時間內我使用VFIO虛擬機玩遊戲沒有遇到過問題,十分穩定,我對此非常滿意。
(不知道甚麼是VFIO/Looking Glass的讀者可讀我介紹VFIO的文章)
最近發生了三件事,令我決定重裝Linux:
- Fedora推出了第40版,同時也為桌面環境KDE帶來了大更新
- 我把原本用作安裝Windows 10虛擬機的SSD轉讓給家人
- Looking Glass推出了B7-rc1版,據說性能上升不少
藉此機會把自己安裝VFIO虛擬機的步驟記下來,希望能幫助其他有興趣的人。
如果你想轉用Linux,但又不想放棄Windows平台上遊戲/生產力軟件,這篇文章應該非常適合你。
如何實現 Link to heading
在讀以下內容前,要注意以下事項:
- 先去找找自己最常玩的遊戲是否支持Linux:如果能直接在Linux上玩的話就不用特意搞VFIO
- 一些線上競技遊戲的反作弊系統可能禁止玩家用虛擬機或Linux,例如Riot Games的英雄聯盟(League of Legends)及特戰英豪(Valorant);你只能透過Dual boot玩這些遊戲
- 本文的安裝步驟只在Fedora 40 KDE上執行過,不一定適用於其他Linux發行版(Distribution)
- 本文假設你的電腦有至少兩張顯示卡(CPU內顯或獨立顯示卡都可),不考慮只有單一顯示卡的情況
你可以去Are We Anti Cheat Yet和ProtonDB找找你玩的遊戲可不可以在Linux上直接玩。
下文以「虛擬機卡」代指傳入虛擬機的顯示卡,「宿主機卡」代指宿主機使用的顯示卡。
單顯示卡仍可設定VFIO虛擬機,不過設定上更麻煩,我也沒做過,所以不作說明。
如堅持要做,請先讀完這個再決定。注意Looking Glass要有至少兩張顯示卡才能運作。
硬件選擇 Link to heading
主機板IOMMU Link to heading
VFIO最看重的是主機板的IOMMU組:IOMMU組是可以傳入虛擬機的最小硬件集合。
(「將硬件傳入虛擬機」的正確術語是PCIe Passthrough)
任何插在主機板上PCIe設備都被分配在一個IOMMU組,如果有多個設備被分配到一個IOMMU組裡,你就只能把它們一起送入虛擬機。
我之前說把顯示卡送進虛擬機裡,其實是把顯示卡所在IOMMU組的全部PCIe設備都送進去。
由於送入虛擬機的設備不能在宿主機或其他虛擬機上使用,主機板有較好的IOMMU組是很重要的(例如你總不能把安裝了宿主機OS的NVMe SSD一起送進去吧)。
我的主機板(技嘉X570S AERO G)的IOMMU組接近完美,幾乎所有設備都在不同的IOMMU組別,而且支持PCIe Bifurcation (x8/x8),十分適合做Looking Glass。
要檢查現有主機板的IOMMU組(不需刪除Windows):
先在BIOS啟用IOMMU。這選項沒有固定名稱,可能是IOMMU 、VT-d 、AMD-V 、SVM 等
找個USB寫入Fedora的映像,然後插入電腦,開機進入BIOS並啟動它
開啟終端程式(KDE的終端是Konsole),執行
nano iommu.sh
在終端貼上以下內容:
#!/bin/bash
shopt -s nullglob
for g in $(find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V); do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
if [[ -e "$d"/reset ]]; then
echo -n "[RESET]"
fi
echo -n $'\t'
echo -e "\t$(lspci -nns ${d##*/})"
done
done
- 按
CTRL+X => Y => ENTER
以儲存並退出nano - 執行
chmod u+x iommu.sh
- 執行
./iommu.sh | less
,可看到IOMMU組分佈及硬件有無Reset功能(按上下鍵移動,按Q
退出)
如果你主機板的IOMMU組分佈不理想(例如兩張顯示卡在同一個IOMMU組內),可以嘗試:
- 更新BIOS(有機會影響IOMMU組分佈)
- 將硬件轉插主機板上其他相容的插槽
- 使用ACS override patch:這個Patch可令全部硬件都有自己一個獨佔既IOMMU組,但用它會帶來安全性風險。請自己斟酌利弊,本文亦不提供安裝教學
如果買新主機板的話,我建議買AMD的X570系。VFIO社群內不少人都說X570系主機板有非常好的IOMMU組分佈,而且不少X570主機板支持PCIe Bifurcation,非常適合Looking Glass。買X570系的壞處是不能戰未來:AM4平台不會再有新產品;它們用的DDR4記憶體同樣是夕陽產品。
如果介意以上缺點,可選買Intel或AMD較新的主機板,但你要自己做功課,在網上找找知道你想買的主機板的IOMMU組: 你可以到VFIO Reddit、VFIO Discord等地方看看。
Reset功能 Link to heading
如果你未買虛擬機卡 ,我建議你買NVIDIA的顯示卡,因為Intel和AMD的顯示卡可能有Reset bug 。
所謂Reset bug 即是硬件沒有Reset功能,無法在虛擬機關機時正確地重置,使其處於一個"假死"狀態。在這個狀態下的硬件會令你不能重新啟動VFIO虛擬機,必須將整個宿主機重啟才能再次啟動它。
上部分檢查IOMMU組的腳本可同時檢查硬件有沒有Reset功能。如果你的AMD顯示卡沒有Reset功能,可以看看Vendor Reset支不支持你的顯示卡,它可為部分AMD顯示卡添加Reset功能。
(AMD連企業用的AI運算顯示卡都沒有Reset功能,令一眾企業客戶大呼中伏。但據說情況正在改善)
顯示卡選擇 Link to heading
上面提及虛擬機卡 推薦使用NVIDIA:Windows驅動程式穩定、有Reset功能;缺點只有貴💸
宿主機卡 推薦Intel或AMD(CPU內顯或獨立顯示卡),因為這兩個牌子的顯示卡在Linux有開源及穩定的驅動程式,此外它們支持DMABUF 功能,這對Looking Glass的性能有大幫助。NVIDIA在Linux上的開源驅動程式性能較差,而官方閉源的驅動程式可能不支持DMABUF 。
如果打算用Looking Glass,開發者建議兩張獨立顯示卡。CPU內顯也可作宿主機卡 使用,但Looking Glass的幀數會較低。我建議先安裝Looking Glass,看看能不能接受其幀數,實在太慢的話再買第二張獨立顯示卡。
如果想買宿主機卡,我推薦Intel Arc系列(如A310或A380),不但便宜、耗電低,更有極強編碼/解碼能力,非常適合OBS用家。
此外,你的螢幕要有至少兩個插口,每張顯示卡分別插一個插口。要注意插口的規格,例如你螢幕只有VGA插口,但顯示卡又只有HDMI/DP插口的話,那你就要換螢幕或顯示卡其中一個了。
CPU Link to heading
因為要至少預留一核/兩線程給宿主機(用Looking Glass的話要留至少兩核/四線程),所以CPU不能太弱。
如果單純VFIO,我建議至少六核/十二線程起步,例如Intel i5-12400/AMD 5600X。
如果要用Looking Glass,我建議至少八核/十六線程起步,例如AMD 5700X。(我個人使用AMD 5900X)
以上的建議都是假設買全大核CPU。如果你的CPU是大小核設計(例如近年Intel的P-core/E-core設計),VFIO設定上可能較麻煩。
其他硬件 Link to heading
除了顯示卡外,你還可能會傳入其他硬件,最有可能的是USB控制器和NVMe SSD/SATA控制器。
請注意傳入的硬件的IOMMU組,還有就是它們有沒有Reset功能。
USB控制器 Link to heading
你可能需要將USB設備傳入VFIO虛擬機(比如Xbox控制器)。將單個USB設備傳入虛擬機不需考慮IOMMU或Reset問題,如能正常使用則再好不過。
但如果你如此傳入去的設備有問題(例如有輸入延遲或經常斷連),我建議你將整個USB控制器傳入去。
注意一個USB控制器通常控制多於一個USB插槽。將控制器傳入後,VFIO虛擬機就能直接控制這些USB插槽上的設備,應能解決絕大部分USB相關問題。
傳入USB控制器要注意IOMMU和Reset問題。你可以用這Python腳本在Linux上檢查USB插槽屬於哪個USB控制器,以及該USB控制器屬於哪個IOMMU組。(註:這腳本只能檢測已插入設備的USB插槽)
NVMe SSD及SATA控制器 Link to heading
VFIO虛擬機可以安裝在虛擬硬碟上,又或者可以直接安裝在其他儲存裝置上(例如NVMe SSD或SATA SSD/HDD)並將其控制器傳入虛擬機:
選擇前者的好處是不需要買額外的儲存裝置,此外可以直接將整個虛擬硬碟做快照及備份。
選擇後者的好處是可以Dual boot(進入BIOS選擇安裝Windows的儲存裝置並啟動即可)。如果你有兩個(控制器不相同)的儲存裝置,而其中之一本來就安裝了Windows,那就可以將Linux安裝在另一儲存裝置上,然後把安裝了Windows的儲存裝置之控制器傳入虛擬機。這樣虛擬機就可直接使用此儲存裝置上的Windows,不需花時間重新安裝。
如果你選擇後者,你要把對應的NVMe控制器(如使用NVMe SSD)或SATA控制器(如使用SATA SSD/HDD)傳入虛擬機。注意一個SATA控制器通常控制多於一個SATA插口,NVMe就通常是一個控制器對一個SSD。
小結 Link to heading
以上就是VFIO/Looking Glass的硬件方面的注意事項。
因為實在太長,我把VFIO虛擬機和Looking Glass的安裝教學放在了下一篇文章。