Ubuntu20.04.3 KVM+显卡直通(passthrough)配置方法

2023-05-16

之前写过在Ubuntu16.X和18.X上使用KVM+显卡直通的方案,很多读者参照博客的内容进行了虚拟化方案,也有不少读者加我QQ联系我咨询问题,时间过去了两三年了,无论Ubuntu版本和KVM版本都有更新了,尤其Nvidia显卡驱动检查方面有了很大的变化,考虑有很多朋友都会用到,加上最近在我们有些客户在LarkXR产品时想结合KVM做显卡直通,所以,就机会更新一下最近Ubuntu20.04.3 KVM+显卡直通的配置方法。

说明:我们LarkXR产品本身是一套开箱即用的云渲染产品,支持一机多卡,单卡共享等细粒度的GPU池化分配方案,本身不需要做虚拟化的,但客户有些特殊的使用场景还是会用到虚拟化,但对Vmware等虚拟化产品价格又户吃不消,所以KVM+显卡直通方案还是非常实用的。

1.硬件环境准备

确定主板和CPU都支持VT-d技术,即Virtualization Technology for Direct I/O(英特尔虚拟技术),近年的产品应该都支持此技术,在BIOS里开启VT-d支持。

通过以下命令确认,有内容输入即可

egrep -o '(vmx|svm)' /proc/cpuinfo

做显卡直通需要两块显卡,一块主机用,另一块虚拟机用,主板有集成显卡的可以采用将集成显卡给宿主机,PCI的独立显卡给虚拟机用。因为如果只有一块显卡,分给虚拟机后宿主机就没有显卡了,将无法显示宿主机的桌面,不便于后面操作,当然,如果你所有操作都可以在命令行上完成,或者不闲麻烦,来回从宿主机和虚拟机之间切换分配显卡,也可以一块。我这里以两块显卡为例来说明。使用集成显卡的需要在BIOS中开启集成显卡。

还要确定要直通的显卡支持PCI Pass-through。目前市面上的显卡一般都支持直通。我用过的NVIDIA 的M60和GeForce系统960,970,980,1060,1080,2060(S),2070(S),2080,3060,3090系列都支持的。

2.软件环境准备

2.1安装Ubuntu20.04.3,并使用以下命令更新系统

sudo apt-get update
sudo apt-get upgrade

2.2安装KVM

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager

qemu-kvm -为KVM管理程序提供硬件仿真的软件。
libvirt-daemon-system -用于将libvirt守护程序作为系统服务运行的配置文件。
libvirt-clients -用于管理虚拟化平台的软件。
bridge-utils -一组用于配置以太网桥的命令行工具。
virtinst -一组用于创建虚拟机的命令行工具。
virt-manager -易于使用的GUI界面和支持命令行工具,用于通过libvirt管理虚拟机。
安装软件包后,libvirt守护程序将自动启动。

您可以通过以下命令确认安装结果:#输出 active

sudo systemctl is-active libvirtd 

也可以使用kvm-ok确认KVM是否安装成功。

为了能够创建和管理虚拟机,您需要将用户添加到“ libvirt”和“ kvm”组中。当然如果使用root用户可以省略该操作。

sudo usermod -aG libvirt $USER sudo usermod -aG kvm $USER

3.确认内核是否支持iommu

cat /proc/cmdline | grep iommu

若没有输出结果,添加intel_iommu=on到grub的启动参数

加"名称=值”的键值对到GRUB_CMDLINE_LINUX_DEFAULT变量,添加多个时用空格隔开,
例如GRUB_CMDLINE_LINUX_DEFAULT="...... name=value"

(注意:理论上添加到GRUB_CMDLINE_LINUX变量和GRUB_CMDLINE_LINUX_DEFAULT任意一个都可以)

使用以下命令编辑grub

sudo view /etc/default/grub

找到GRUB_CMDLINE_LINUX_DEFAULT或GRUB_CMDLINE_LINUX加入iommu开关,如下:

GRUB_CMDLINE_LINUX="intel_iommu=on"

然后更新grub.cfg文件使其生效

grub-mkconfig -o /boot/grub/grub.cfg
或者
sudo update-grub

需要重启服务器,然后检查是否开启成功,成功则显示DMAR: IOMMU enabled

dmesg | grep IOMMU
或
dmesg | grep -e DMAR -e IOMMU

4.将显卡从宿主机解绑

4.1.查看pci设备信息

lspci -nn | grep NVIDIA

如果不是NVIDIA的显卡,可以换自己显卡的关键字查询。从查询结果上查看自己独立显卡(也就是要直通的显卡)的设备ID和地址,形如: [10de 17c8] 和 [10de 0fb0], 01.00.0和01.00.1。(Gefore显卡一般会集成一个声卡芯片)

4.2.查看驱动

lspci -vv -s 01:00.0 | grep driver
  >Kernel driver in use: nouveau    (ubuntu系统为显卡绑定的默认驱动)
lspci -vv -s 01:00.1 | grep driver
  >Kernel driver in user: snd_hda_intel (显卡上附带的集成声卡的默认驱动)

4.3.禁用显卡的默认驱动

禁用nouveau, snd_hda_intel,将其添加到/etc/modprobe.d/blacklist.conf文件最后

blacklist nouveau
blacklist snd_hda_intel

重启服务器,此时独立显卡将从宿主机解绑的,注意显示器应该接在宿主机集成显卡上,否则重启显示器将无显示。

注意:

以前版本解绑定还需要做其他操作,现在不需要;

包括查看显卡设备的分组信息,整组设备直通现在也不需要;

安装OVMF把显卡 BIOS 添加到虚拟机的 UEFI 固件(即 OVMF)中,以及修改虚拟机配置文件,欺骗显卡不是在虚拟机使用,绕过显卡驱动报43错误的问题,2021年4月以后的英伟达显卡驱动已经不需要绕过虚拟化检测了。

5.创建虚拟机

启动VirtManager,创建虚拟机,指定CPU核数,内存大小,磁盘大小,然后添加PCI设备,直接选择刚才上面操作那个独立显卡就可以,虚拟机安装好Windows10或Server版以后,从英伟达官网 下载对应的驱动,安装即可。


QQ:18100053

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu20.04.3 KVM+显卡直通(passthrough)配置方法 的相关文章

随机推荐