0
点赞
收藏
分享

微信扫一扫

Ubuntu20.04、kvm、nvidia显卡直通虚拟机

一、测试环境:

准系统:4124GP-TNR

cpu:7T83  两颗
内存:三星  32g   3200   16根

显卡:3090

系统:Ubuntu20.04

二、安装kvm

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

2、为了能够创建和管理虚拟机,需要讲用户添加到“libvirt”和“kvm”组中。

sudo usermod -aG libvirt $USER

sudo usermod -aG kvm $USER


三、开启iommu

1、修改/etc/default/grub,如下图:

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_显卡驱动

2、更新grub文件

sudo update-grub

3、重启

sudo reboot

4、检查是否开启iommu成功

dmesg | grep -e DMAR -e IOMMU

如图所示:

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_重启_02

四、查看是否已禁用nouveau

lsmod | grep nouveau

如此所示:

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_kvm_03

没有输出,说明已经被禁用,如果有输出,请执行如下:

(1)、禁用nouveau:命令如下:

sudo vim /etc/modprobe.d/blacklist.conf

#在最后面添加如下代码:

blacklist nouveau

blacklist lbm-nouveau

options nouveau modeset=0

alias nouveau off

alias lbm-nouveau off

 #然后保存并退出

 (2)、为了保证完全禁用掉,还要在内核中直接禁用Nouveau:

命令如下:

echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf

这之后,更新配置试生效,命令如下:

sudo update-initramfs -u

重启:sudo  reboot

五、显卡从系统上解除绑定

 在解除绑定之前,如果安装了显卡驱动,则必须卸载显卡驱动,否则无法解除绑定

nvidia-smi

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_nvidia显卡直通kvm_04

如果出现如图所示,说明没有安装显卡驱动

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_vim_05


出现上图所示,说明已经安装了显卡驱动:

卸载驱动命令:

sudo /usr/bin/nvidia-uninstall

卸载完成后,重新执行nvidia-smi,确认是否卸载成功

卸载成功后,重启

 

1、查询显卡id地址

lspci -nn | grep NVIDIA

例子如下图:

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_nvidia显卡直通kvm_06

左边的那一串数字,则是id地址,每张卡都有一个audio地址,在分配给虚拟机时,也是需要分配给虚拟机的。

2、使用libvirt进行解除绑定并配置开启自启执行命令

(1)查询设备ID:

virsh nodedev-list | grep pci

使用此命令查询的id与上面1中查询的id格式并不一样,查询其中一个设备确认是否为nvidia显卡对应id:

virsh nodedev-dumpxml pci_0000_01_00_0

如下图:

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_nvidia显卡直通kvm_07

(2)、解除绑定

sudo modprobe pci_stub

sudo virsh nodedev-detach pci_0000_01_00_0

sudo virsh nodedev-detach pci_0000_01_00_1

#有多少张显卡,更换id执行多少次,每张显卡有两个id,需要两个id都解除绑定

(3)、设置自动解除绑定显卡


1、sudo vim /lib/systemd/system/rc-local.service   #末尾添加:

[Install]

WantedBy=multi-user.target

Alias=rc-local.service


#保存并退出

 

sudo systemctl enable rc-local.service

2、启动自启

sudo systemctl enable rc-local.service

3、编写rc.local

 sudo vim /etc/rc.local

#!/bin/sh -e

sudo vim /etc/rc.local

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

#

# value on error.

# Make sure that the script will "exit 0" on success or any other

# In order to enable or disable this script just change the execution

#

#

# bits.

 

# By default this script does nothing.

# add your scritp here

echo "this shows rc.local is start onboot" > /usr/local/rc-local-info.log

sleep 1

sudo modprobe pci_stub

sleep 1

virsh nodedev-detach pci_0000_01_00_0

sleep 1

virsh nodedev-detach pci_0000_01_00_1

exit 0


#保存并退出,每行的virsh命令之间都隔一个sleep 1进行延迟,有多少张显卡更改id进行添加。

4、设置rc.local权限

sudo chmod -R +x /etc/rc.local

5、重启

sudo reboot

#如果已经在终端执行了解除绑定命令,可以不重启,设置rc.local是为了后面因为重启而导致显卡与系统进行了绑定,重启后,系统会重新绑定显卡。

六、创建虚拟机

1、virt-manager

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_kvm_08

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_kvm_09



Ubuntu20.04、kvm、nvidia显卡直通虚拟机_nvidia显卡直通kvm_10

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_nvidia显卡直通kvm_11

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_重启_12

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_vim_13

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_显卡驱动_14

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_vim_15


Ubuntu20.04、kvm、nvidia显卡直通虚拟机_kvm_16

下面就是进入win10安装过程,我这里就省略了,进入系统后关机

七、显卡直通虚拟机


Ubuntu20.04、kvm、nvidia显卡直通虚拟机_重启_17


Ubuntu20.04、kvm、nvidia显卡直通虚拟机_显卡驱动_18

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_重启_19

然后apply后,开机

Ubuntu20.04、kvm、nvidia显卡直通虚拟机_nvidia显卡直通kvm_20


虚拟机中这里会有个感叹号的显示适配器,下一步就是去nvidia官网下载显卡驱动,显卡驱动安装好了后,虚拟机重启,必须重启,否则显卡无法被完全使用。


Ubuntu20.04、kvm、nvidia显卡直通虚拟机_nvidia显卡直通kvm_21


安装显卡驱动后,可以显示出显卡型号了,并且NVIDIA面板也可以打开


Ubuntu20.04、kvm、nvidia显卡直通虚拟机_vim_22

对此,虚拟机直通显卡测试成功。






举报

相关推荐

0 条评论