目前來說,GPU Passthrough需要主機(jī)有兩張顯卡,一張分給host,一張直通給虛擬機(jī)guest。我的電腦使用兩張顯卡1070Ti和1050Ti配置,我將根據(jù)我的電腦展示配置過程。最終host使用1070Ti,虛擬機(jī)直通1050Ti。虛擬機(jī)分別使用MacOS Highsierra和Win10來展示。
注:如果使用macOS mojave 或 macOS Catalina,在沒有結(jié)決NVIDIA驅(qū)動情況下,最好使用AMD免驅(qū)顯卡(如RX580,RX590等,2048sp版的有問題)。
首先配置好KVM環(huán)境,參考ArchLinux/Manjaro 配置KVM環(huán)境
1. 啟用IOMMU
修改grub配置,添加intel_iommu=on 或 intel_iommu=on,根據(jù)自己CPU不同來更改
$ sudo vim /etc/default/grub
更改grub后,升級grub.cfg
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
2. 將需要直通的GPU與host隔離
1. 查看需要直通的GPU的id

因為我要直通的是1050Ti,所以我需要的id是
10de:1c82, 10de:0fb9
2. 隔離GPU
1.加載vfio-pci, 并將ID傳遞給內(nèi)核,打開 /etc/modprobe.d/vfio.conf文件,添加
options vfio-pci ids=10de:1c82,10de:0fb9
注:在ArchLInux,這個確實起作用,但是在Manjaro中,可能無效,解決辦法是修改grub, 添加 vfio_pci.ids=10de:1c82,10de:0fb9 如下圖

修改grub文件后,要升級
grub.cfg, 同上
- 確保
vfio-pci在其它圖形驅(qū)動之前加載,修改 /etc/mkinitcpio.conf, 按照順序?qū)?code>vfio_pci,vfio,vfio_iommu_type1,vfio_virqfd的順序添加到mkinitcpio
# /etc/mikinitcpio.conf
MODULES=(... vfio_pci vfio vfio_iommu_type1 vfio_virqfd ...)
確保 modconf hook 在 mkinitcpio.conf 的 HOOKS列表
# /etc/mkinitcpio.conf
HOOKS=(... modconf ...)
- 修改
mkinitcpio.conf后,要重新生成initramfs,運(yùn)行如下命令
$ sudo mkinitcpio -p linux
- 完成以上內(nèi)容,重啟,1050Ti就會和host隔離,如圖

通過圖可以發(fā)現(xiàn) 1070Ti 使用
nvidia 和snd_hda_intel, 1050Ti 使用vfio-pci,說明1050Ti成功和host隔離。接下來就可以將1050Ti分配給虛擬機(jī)。
3. 將GPU直通給虛擬機(jī)
1. 將GPU直通給MacOS
打開virt-manager 中的macOS進(jìn)行配置
- 刪除macOS原有的顯示硬件
- 點擊 添加硬件--PCI主機(jī)設(shè)備--選中1050Ti(1050Ti和相應(yīng)的 High Definition Audio Controller)
- 點擊 添加硬件--PCI主機(jī)設(shè)備--選一個USB Host controller 用于添加鼠標(biāo)鍵盤
- 將顯示器連接到1050Ti上,開機(jī)就進(jìn)入使用1050Ti的MacOS,安裝好Nvidai WebDriver,就可以愉快地使用MacOS了

2. 將GPU直通給Win10
操作和上面類似,但是也有不同,打開virt-manager 對win10 進(jìn)行配置
注:windows上的Nvidia驅(qū)動檢查虛擬機(jī)管理程序是否在運(yùn)行,如果檢測到虛擬機(jī)管理程序,則會拒絕加載,這會導(dǎo)致Windwos設(shè)備管理器出現(xiàn)錯誤43。
- 刪除macOS原有的顯示硬件
- 點擊 添加硬件--PCI主機(jī)設(shè)備--選中1050Ti(1050Ti和相應(yīng)的 High Definition Audio Controller)
- 點擊 添加硬件--PCI主機(jī)設(shè)備--選一個USB Host controller 用于添加鼠標(biāo)鍵盤
- 設(shè)置虛假的vender_id,來欺騙Nvidia驅(qū)動程序,ID必須設(shè)置為12個字符的字母數(shù)字。編輯配置虛擬機(jī)的
win10.xml文件,添加以下內(nèi)容
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vendor_id state="on" value="1234567890ab"/>
</hyperv>
<kvm>
<hidden state="on"/>
</kvm>
<vmport state="off"/>
</features>
- 將顯示器連接到1050Ti上,開機(jī)安裝NVIDIA驅(qū)動,開始使用。
參考資料
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF