一、 背景说明
显卡直通是一种虚拟化技术,允许将物理主机上的显卡(GPU)直接分配给虚拟机,使得虚拟机能够直接访问和使用显卡。这种技术可以提供更好的图形性能和更低的延迟,尤其适用于需要高性能图形处理的应用场景,例如游戏、图形设计、科学计算等。
传统的虚拟化技术通常使用虚拟显卡来模拟图形硬件,但这种方式通常无法满足对图形性能要求较高的应用。通过显卡直通,虚拟机可以直接访问物理显卡,充分发挥其性能,同时避免了虚拟显卡引入的性能损失和延迟。
实施显卡直通通常是出于以下几个原因:
1.提高性能: 对于需要高性能图形处理的应用,直接使用物理显卡可以提供比虚拟显卡更高的性能,包括更高的帧率、更短的响应时间等。
2.降低延迟: 直通技术可以减少虚拟化引入的延迟,提高图形应用的响应速度,特别是对于对延迟敏感的应用,如游戏或虚拟现实。
3.支持专业应用: 对于需要使用专业图形软件或进行科学计算的用户,直通技术可以确保虚拟机能够充分利用物理显卡的性能,从而提高工作效率和计算速度。
二、部署虚拟机前准备
注意:KVM虚拟机直通需要两块以上显卡,因虚拟机直通显卡后,Server端将无法使用显卡。此时可使用CPU的核显或其他显卡来对Server端显示。
2.1 OS系统安装
自行准备 Debian系列或RedHat系列的Linux系统;
注:请安装图形化界面操作系统,非图形化操作系统配置较为繁琐。
以下操作以Debian 11.9图形化操作系统为例。
2.2 BIOS功能
在配置之前首先要在BIOS界面打开虚拟化相关功能,这里以Intel CPU为例,进入到BIOS后,
Advanced→CPU Configuration→Intel (VMX) Virtualization Technology→Enable
Advanced→Graphics Configuration→VT-d→Enable
OS下再次确认开启与否
# egrep -c '(vmx|svm)' /proc/cpuinfo
该命令用于查找并统计‘cpuinfo‘文件中’vmx‘或’svm‘字样出现的次数,若输出不为0表明已设置成功。若输出为0,则需要重新回到BIOS进行设置并确认自己的处理器是否支持虚拟化技术。
2.3 确认内核是否支持iommu
IOMMU(Input/Output Memory Management Unit)是一种硬件机制,用于管理设备之间的内存访问,通常用于支持虚拟化和设备直通。
执行以下命令查看是否存在与 IOMMU 相关的启动参数
# cat /proc/cmdline | grep iommu 或
# dmesg | grep IOMMU
若无输出则执行以下步骤进行设置
编辑grub配置文件
# vi /etc/default/grub
在GRUB_CMDLINE_LINUX行,添加intel_iommu=on。(如果是amd的CPU则添加
GRUB_CMDLINE_LINUX="amd_iommu=on")
更新grub配置以应用更改
# sudo update-grub
# sudo reboot
重启后,再次检查,确认开启成功。
# dmesg | grep IOMMU
2.4 禁用NVIDIA或AMD 默认驱动
AMD显卡默认驱动:amdgpu
NVIDIA显卡默认驱动:nouveau
当宿主机启动后,操作系统是接管独立显卡的。如果我们想实现虚拟机直通显卡,则必须让宿主机放弃对独立显卡的控制。
注意:如果已在系统内安装CUDA或nvidia官方驱动,需要先自行卸载!
# vi /etc/modprobe.d/blacklist.conf
文件末尾添加如下配置,禁用默认的amd、nvidia、声卡驱动
blacklist amdgpu
blacklist nouveau
blacklist snd_hda_intel
options nouveau modeset=0
保存退出
更新内核设备信息
# sudo update-initramfs -u
重启设备
# sudo reboot
检查是否有输出,如果没有,则已禁用完成。
# lsmod | grep nouveau
2.5 启动VFIO
# vi /etc/modules
添加如下内容:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
保存退出并重启设备
# sudo reboot
三、虚拟机部署
3.1 防火墙及selinux关闭
关闭防火墙和selinux
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
3.2 可靠的源替换
1、Centos建议使用阿里源
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
# yum clean all
# yum makecache
2、ubuntu使用默认源
3、Debian使用阿里源
# sudo vi /etc/apt/sources.list (操作前请做好相应备份)
将原来的源替换为如下:
deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
# sudo apt-get update
3.3 依赖包安装
Debian系列:
# sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager ovmf
RedHat系列:
# yum install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager ovmf virtinst
注:
· qemu-kvm:提供 KVM 虚拟化的基础组件。
· libvirt-daemon-system:提供 libvirt 守护进程。
· libvirt-clients:提供 libvirt 客户端工具。
· bridge-utils:提供用于设置网络桥接的实用工具。
· virt-manager:提供图形化的虚拟机管理器。
· ovmf:提供 OVMF 固件,用于虚拟机的 UEFI 引导。
· virtinst:提供用于创建和配置虚拟机的工具。
3.4 网桥部署
确认网口link状态及要使用桥接的网口
# ip a
3.4.1 配置DHCP网桥
# sudo vi /etc/network/interfaces
添加如下内容:
auto br0
iface br0 inet dhcp
bridge_ports enp5s0
bridge_stp on
bridge_fd 2
bridge_maxwait 20
重启网络服务
# sudo systemctl restart networking
查看网桥是否配置成功:
# brctl show
3.4.2 配置固定IP的网桥
如果需要配置固定IP的网桥则修改如下:
# sudo vi /etc/network/interfaces
添加以下内容:
auto br0
iface br0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
bridge_stp on
bridge_fd 2
bridge_maxwait 20
重启网络服务
# sudo systemctl restart networking
查看网桥是否配置成功:
# brctl show
3.5 虚拟机部署
提前将要安装的Windows镜像cp到系统下:
找到虚拟机管理软件QEMU。
点击新建虚拟机:
选择本地安装介质
浏览,选择Windows镜像文件
内存和CPU可以先随便给,后续可以修改
安装前部署不再赘述
3.6 绕过TPM检测
为保证Windows系统顺利安装,需要绕过TPM检测,方法如下:
选择修复计算机--选择疑难解答--选择命令行提示符,并输入regedit
在HKEY_LOCAL_MACHINE→SYSTEM→Setup下新建一个名为LabConfig的项
并创建以下5个DWORD值,值为1。
然后关闭注册表编辑器,回到命令行界面输入setup.exe 继续安装。
此处Windows安装过程不在赘述,等待安装完成,重启即可。
四、显卡直通部署
确保虚拟机在关闭状态,重新配置虚拟机。
配置CPU数量:
建议配置为物理CPU线程数量的80%,否则虚拟机进行性能测试时跑分偏低。
如图所示物理CPU共20线程,此时虚拟机配置8个核心,每个核心2个线程,共计16线程。
内存配置,根据实际情况调整。
选择添加硬件,将显卡直通给虚拟机。两个pci设备均需要添加,否则后续安装显卡驱动会报错,两个设备分别为显卡和声卡。
此时再开启虚拟机,显卡就直通给虚拟机使用了,接下来进入虚拟机安装显卡驱动后,即可完成,可在设备管理器下看到显卡。