KVM + PCI Passthrough

目前来说,GPU Passthrough需要主机有两张显卡,一张分给host,一张直通给虚拟机guest。我的电脑使用两张显卡1070Ti和1050Ti配置,我将根据我的电脑展示配置过程。最终host使用1070Ti,虚拟机直通1050Ti。虚拟机分别使用MacOS HighsierraWin10来展示。
:如果使用macOS mojave 或 macOS Catalina,在没有结决NVIDIA驱动情况下,最好使用AMD免驱显卡(如RX580,RX590等,2048sp版的有问题)。
首先配置好KVM环境,参考ArchLinux/Manjaro 配置KVM环境

1. 启用IOMMU

修改grub配置,添加intel_iommu=onintel_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文件后,要升级grub.cfg, 同上

  1. 确保vfio-pci在其它图形驱动之前加载,修改 /etc/mkinitcpio.conf, 按照顺序将vfio_pcivfiovfio_iommu_type1vfio_virqfd 的顺序添加到mkinitcpio
# /etc/mikinitcpio.conf
MODULES=(... vfio_pci vfio vfio_iommu_type1 vfio_virqfd ...)

确保 modconf hook 在 mkinitcpio.conf 的 HOOKS列表

# /etc/mkinitcpio.conf
HOOKS=(... modconf ...)
  1. 修改mkinitcpio.conf 后,要重新生成initramfs,运行如下命令
$ sudo mkinitcpio -p linux
  1. 完成以上内容,重启,1050Ti就会和host隔离,如图

查看使用的驱动

通过图可以发现 1070Ti 使用 nvidiasnd_hda_intel, 1050Ti 使用vfio-pci,说明1050Ti成功和host隔离。接下来就可以将1050Ti分配给虚拟机。

3. 将GPU直通给虚拟机

1. 将GPU直通给MacOS

打开virt-manager 中的macOS进行配置

  1. 删除macOS原有的显示硬件
  2. 点击 添加硬件--PCI主机设备--选中1050Ti(1050Ti和相应的 High Definition Audio Controller)
  3. 点击 添加硬件--PCI主机设备--选一个USB Host controller 用于添加鼠标键盘
  4. 将显示器连接到1050Ti上,开机就进入使用1050Ti的MacOS,安装好Nvidai WebDriver,就可以愉快地使用MacOS了
我的系统

2. 将GPU直通给Win10

操作和上面类似,但是也有不同,打开virt-manager 对win10 进行配置
:windows上的Nvidia驱动检查虚拟机管理程序是否在运行,如果检测到虚拟机管理程序,则会拒绝加载,这会导致Windwos设备管理器出现错误43。

  1. 删除macOS原有的显示硬件
  2. 点击 添加硬件--PCI主机设备--选中1050Ti(1050Ti和相应的 High Definition Audio Controller)
  3. 点击 添加硬件--PCI主机设备--选一个USB Host controller 用于添加鼠标键盘
  4. 设置虚假的vender_id,来欺骗Nvidia驱动程序,ID必须设置为12个字符的字母数字。编辑配置虚拟机的win10.xml文件,添加以下内容

    
    
    
      
      
      
      
    
    
      
    
    
  
  1. 将显示器连接到1050Ti上,开机安装NVIDIA驱动,开始使用。

KVM 安装 win10
KVM + MacOS

参考资料

https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF

你可能感兴趣的:(KVM + PCI Passthrough)