admin管理员组

文章数量:1027819

Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战

背景:

PCIe Passthrough 技术允许虚拟机直接访问物理GPU设备,绕过宿主机系统,从而获得接近原生性能的图形处理能力. 参照:从Proxmox VE开始:安装与配置指南。在R740服务器完成了proxmox的安装,并且安装了一张2080ti 魔改22g显存的的显卡。现在我需要将显卡直接直通到一台vm实例上面。

验证系统信息

系统版本与显卡信息如下:

代码语言:plain复制
cat /etc/os-release
pveversion -v 

****输出确认当前proxmox server 是基于debian 12 版本的 8.4.0 proxmox操作系统 :

显卡信息 2080ti的信息:

代码语言:plain复制
 lspci -nnk|grep "NVIDIA"

下面就就详细记录一下具体过程!

请注意:当前服务器cpu为intel处理器,amd处理器配置有些许不同,请注意查找一下相关资料......

Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战

检查和启用IOMMU支持

IOMMU(Input-Output Memory Management Unit)是硬件辅助的虚拟化技术,为PCI设备直通提供必要的内存管理和隔离功能。

修改GRUB配置

代码语言:plain复制
# 备份原始配置
cp /etc/default/grub /etc/default/grubold
# 编辑GRUB配置
vi /etc/default/grub

编辑/etc/default/grub文件,并在GRUB_CMDLINE_LINUX_DEFAULT行中添加以下内容(使用默认,pve版本为8.4):

代码语言:plain复制
# 修改 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配置:

代码语言:plain复制
update-grub

添加必要的的内核模块

打开文件 /etc/modules,新增以下4行内容

代码语言:plain复制
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

reboot 重启 proxmox 主机

验证IOMMU是否启用

待服务器启动后,登录服务器验证IOMMU是否启用:

代码语言:plain复制
dmesg | grep -E "DMAR|IOMMU"

验证并 配置VFIO

验证VFIO模块:

代码语言:plain复制
dmesg | grep -i vfio

查看显卡id:

代码语言:plain复制
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:

代码语言:plain复制
# 添加PCI设备
echo "options vfio-pci ids=10de:1e07 disable_vga=1" > /etc/modprobe.d/vfio.conf

注意请一定注意这里的将设备Id添加到vfio.conf操作。往上很多笔记遗忘了该部分!

验证是否支持 中断重映射

代码语言:plain复制
dmesg | grep 'remapping'

屏蔽显卡驱动 :

在proxmox主机屏蔽掉显卡的驱动:

代码语言:plain复制
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

其他有用的配置

  • 允许不安全的中断
代码语言:plain复制
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
  • 为 NVIDIA 卡添加稳定性修复和优化
代码语言:plain复制
echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

更新内核引导文件

更新内核引导文件并重启宿主机:

代码语言:plain复制
update-initramfs -k all -u
reboot

验证是否成功:

代码语言:plain复制
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实例成功挂载了显卡设备:

代码语言:plain复制
lspci | grep -i vga
lspci -nn | grep NVIDIA

ok到这里 显卡就完成了 显卡直通的相关操作!下一章节给vm实例安装显卡驱动与cuda!

Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战

背景:

PCIe Passthrough 技术允许虚拟机直接访问物理GPU设备,绕过宿主机系统,从而获得接近原生性能的图形处理能力. 参照:从Proxmox VE开始:安装与配置指南。在R740服务器完成了proxmox的安装,并且安装了一张2080ti 魔改22g显存的的显卡。现在我需要将显卡直接直通到一台vm实例上面。

验证系统信息

系统版本与显卡信息如下:

代码语言:plain复制
cat /etc/os-release
pveversion -v 

****输出确认当前proxmox server 是基于debian 12 版本的 8.4.0 proxmox操作系统 :

显卡信息 2080ti的信息:

代码语言:plain复制
 lspci -nnk|grep "NVIDIA"

下面就就详细记录一下具体过程!

请注意:当前服务器cpu为intel处理器,amd处理器配置有些许不同,请注意查找一下相关资料......

Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战

检查和启用IOMMU支持

IOMMU(Input-Output Memory Management Unit)是硬件辅助的虚拟化技术,为PCI设备直通提供必要的内存管理和隔离功能。

修改GRUB配置

代码语言:plain复制
# 备份原始配置
cp /etc/default/grub /etc/default/grubold
# 编辑GRUB配置
vi /etc/default/grub

编辑/etc/default/grub文件,并在GRUB_CMDLINE_LINUX_DEFAULT行中添加以下内容(使用默认,pve版本为8.4):

代码语言:plain复制
# 修改 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配置:

代码语言:plain复制
update-grub

添加必要的的内核模块

打开文件 /etc/modules,新增以下4行内容

代码语言:plain复制
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

reboot 重启 proxmox 主机

验证IOMMU是否启用

待服务器启动后,登录服务器验证IOMMU是否启用:

代码语言:plain复制
dmesg | grep -E "DMAR|IOMMU"

验证并 配置VFIO

验证VFIO模块:

代码语言:plain复制
dmesg | grep -i vfio

查看显卡id:

代码语言:plain复制
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:

代码语言:plain复制
# 添加PCI设备
echo "options vfio-pci ids=10de:1e07 disable_vga=1" > /etc/modprobe.d/vfio.conf

注意请一定注意这里的将设备Id添加到vfio.conf操作。往上很多笔记遗忘了该部分!

验证是否支持 中断重映射

代码语言:plain复制
dmesg | grep 'remapping'

屏蔽显卡驱动 :

在proxmox主机屏蔽掉显卡的驱动:

代码语言:plain复制
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

其他有用的配置

  • 允许不安全的中断
代码语言:plain复制
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
  • 为 NVIDIA 卡添加稳定性修复和优化
代码语言:plain复制
echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

更新内核引导文件

更新内核引导文件并重启宿主机:

代码语言:plain复制
update-initramfs -k all -u
reboot

验证是否成功:

代码语言:plain复制
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实例成功挂载了显卡设备:

代码语言:plain复制
lspci | grep -i vga
lspci -nn | grep NVIDIA

ok到这里 显卡就完成了 显卡直通的相关操作!下一章节给vm实例安装显卡驱动与cuda!

本文标签: Proxmox VE 84 显卡直通完整指南NVIDIA 2080 Ti 实战