目前来说,GPU Passthrough需要主机有两张显卡,一张分给host,一张直通给虚拟机guest。我的电脑使用两张显卡1070Ti和1050Ti配置,我将根据我的电脑展示配置过程。最终host使用1070Ti,虚拟机直通1050Ti。虚拟机分别使用MacOS Highsierra和Win10来展示。
注:如果使用macOS mojave 或 macOS Catalina,在没有结决NVIDIA驱动情况下,最好使用AMD免驱显卡(如RX580,RX590等,2048sp版的有问题)。
首先配置好KVM环境,参考ArchLinux/Manjaro 配置KVM环境
1. 启用IOMMU
修改grub配置,添加intel_iommu=on
或 intel_iommu=on
,根据自己CPU不同来更改
$ sudo vim /etc/default/grub
更改grub后,升级grub.cfg
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
2. 将需要直通的GPU与host隔离
1. 查看需要直通的GPU的id
查看分离显卡的id因为我要直通的是1050Ti,所以我需要的id是
10de:1c82
, 10de:0fb9
2. 隔离GPU
1.加载vfio-pci
, 并将ID传递给内核,打开 /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
在其它图形驱动之前加载,修改 /etc/mkinitcpio.conf, 按照顺序将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
,运行如下命令
$ sudo mkinitcpio -p linux
- 完成以上内容,重启,1050Ti就会和host隔离,如图
通过图可以发现 1070Ti 使用
nvidia
和snd_hda_intel
, 1050Ti 使用vfio-pci
,说明1050Ti成功和host隔离。接下来就可以将1050Ti分配给虚拟机。
3. 将GPU直通给虚拟机
1. 将GPU直通给MacOS
打开virt-manager 中的macOS进行配置
- 删除macOS原有的显示硬件
- 点击 添加硬件--PCI主机设备--选中1050Ti(1050Ti和相应的 High Definition Audio Controller)
- 点击 添加硬件--PCI主机设备--选一个USB Host controller 用于添加鼠标键盘
- 将显示器连接到1050Ti上,开机就进入使用1050Ti的MacOS,安装好Nvidai WebDriver,就可以愉快地使用MacOS了
2. 将GPU直通给Win10
操作和上面类似,但是也有不同,打开virt-manager 对win10 进行配置
注:windows上的Nvidia驱动检查虚拟机管理程序是否在运行,如果检测到虚拟机管理程序,则会拒绝加载,这会导致Windwos设备管理器出现错误43。
- 删除macOS原有的显示硬件
- 点击 添加硬件--PCI主机设备--选中1050Ti(1050Ti和相应的 High Definition Audio Controller)
- 点击 添加硬件--PCI主机设备--选一个USB Host controller 用于添加鼠标键盘
- 设置虚假的vender_id,来欺骗Nvidia驱动程序,ID必须设置为12个字符的字母数字。编辑配置虚拟机的
win10.xml
文件,添加以下内容
<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上,开机安装NVIDIA驱动,开始使用。
参考资料
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
网友评论