Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战
背景:
PCIe Passthrough 技术允许虚拟机直接访问物理GPU设备,绕过宿主机系统,从而获得接近原生性能的图形处理能力. 参照:从Proxmox VE开始:安装与配置指南。在R740服务器完成了proxmox的安装,并且安装了一张2080ti 魔改22g显存的的显卡。现在我需要将显卡直接直通到一台vm实例上面。
验证系统信息
系统版本与显卡信息如下:
cat /etc/os-release
pveversion -v
****输出确认当前proxmox server 是基于debian 12 版本的 8.4.0 proxmox操作系统 :
显卡信息 2080ti的信息:
lspci -nnk|grep "NVIDIA"
下面就就详细记录一下具体过程!
请注意:当前服务器cpu为intel处理器,amd处理器配置有些许不同,请注意查找一下相关资料…
Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战
检查和启用IOMMU支持
IOMMU(Input-Output Memory Management Unit)是硬件辅助的虚拟化技术,为PCI设备直通提供必要的内存管理和隔离功能。
修改GRUB配置
# 备份原始配置
cp /etc/default/grub /etc/default/grubold
# 编辑GRUB配置
vi /etc/default/grub
编辑/etc/default/grub文件,并在GRUB_CMDLINE_LINUX_DEFAULT行中添加以下内容(使用默认,pve版本为8.4):
# 修改 GRUB_CMDLINE_LINUX_DEFAULT 配置为GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream"#注意:pve 7.2 以前版本使用
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off pcie_acs_override=downstream"
参数说明(deepseek总结的参数定义,可以个人查缺补漏):
**参数说明 **:
**intel_iommu=on **
: 启用Intel平台的IOMMU支持**iommu=pt **
: 仅对直通设备启用IOMMU,减少性能开销**initcall_blacklist=sysfb_init **
: 防止宿主机占用显卡帧缓冲区**pcie_acs_override=downstream **
: 解决某些PCIe设备的ACS限制问题
**注意 **:对于AMD平台,需将 **intel_iommu=on **
替换为 **amd_iommu=on **
更新grub配置:
update-grub
添加必要的的内核模块
打开文件 /etc/modules
,新增以下4行内容
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
**reboot **重启 proxmox 主机
验证IOMMU是否启用
待服务器启动后,登录服务器验证IOMMU是否启用:
dmesg | grep -E "DMAR|IOMMU"
验证并 配置VFIO
验证VFIO模块:
dmesg | grep -i vfio
查看显卡id:
root@proxmox1:~# lspci -nn | grep NVIDIA
3b:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti Rev. A] [# 添加PCI设备
echo "options vfio-pci ids=10de:1e07 disable_vga=1" > /etc/modprobe.d/vfio.conf
] (rev a1)
3b:00.1 Audio device [0403]: NVIDIA Corporation TU102 High Definition Audio Controller [10de:10f7] (rev a1)
3b:00.2 USB controller [0c03]: NVIDIA Corporation TU102 USB 3.1 Host Controller [10de:1ad6] (rev a1)
3b:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU102 USB Type-C UCSI Controller [10de:1ad7] (rev a1)
得到显卡的id是:10de:1e07(注意这里的10de:10f7,10de:1ad6 ,10de:1ad7应该都加上去,我这里就用显卡功能无所谓了 )
将设备ID添加到 vfio.conf:
# 添加PCI设备
echo "options vfio-pci ids=10de:1e07 disable_vga=1" > /etc/modprobe.d/vfio.conf
注意请一定注意这里的将设备Id添加到vfio.conf操作。往上很多笔记遗忘了该部分!
验证是否支持 **中断重映射 **
dmesg | grep 'remapping'
屏蔽显卡驱动 :
在proxmox主机屏蔽掉显卡的驱动:
echo "# NVIDIA" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia_drm" >> /etc/modprobe.d/blacklist.conf
echo "" >> /etc/modprobe.d/blacklist.conf
其他有用的配置
- 允许不安全的中断
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
- 为 NVIDIA 卡添加稳定性修复和优化
echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf
更新内核引导文件
更新内核引导文件并重启宿主机:
update-initramfs -k all -u
reboot
验证是否成功:
lspci -nn | grep NVIDIA
lspci -nnk -s 3b:00
正常直通时,输出应显示内核驱动为 **vfio-pci **
**,如果未显示则需要执行 **验证并配置VFIO部分。
vm实例添加显卡
等待宿主机启动后完成如下操作!
VM实例添加显卡:
这里使用了登录web控制台增加pci设备的方式,当然也可以shell登录宿主机使用命令添加的方式!
以VM实例301为例:点击vm 实例-硬件-添加-PCI设备-原始设备,找到2080TI设备选中,添加:
启动虚拟机实例:
确认当前vm实例是关闭状态,启动 VM实例:
注意,由于proxmox reboot操作过,并且我的vm实例不是开机自启动,这里可以操作后直接启动,如果是正在运行中的实例,请关闭实例后启动.
验证vm实例挂载显卡成功:
登录vm 301实例,使用如下命令确认vm实例成功挂载了显卡设备:
lspci | grep -i vga
lspci -nn | grep NVIDIA
ok到这里 显卡就完成了 显卡直通的相关操作!下一章节给vm实例安装显卡驱动与cuda!