vmware esxi 显卡直通模式验证

背景

物理机器有显卡L20 (4 * 48G),安装vmware esxi系统,希望虚拟机rocky linux 10 直通物理显卡。

  • vmware ESXi-8.0U2-22380479
  • rocky linux 10

直通模式配置

vmware esxi 配置

由于ESXi 8.0没有对12代以后的CPU做默认的支持,所以在安装ESXi 8.0过程中会遇到紫屏的问题。为了解决这一问题,需要对ESXi的启动参数进行修改。

    1. 修改启动参数
      在ESXi启动界面,按 Shift + O 进入启动选项编辑模式,然后添加以下参数:cpuUniformityHardCheckPanic=FALSE
      完整的启动参数示例如下:kernelopt=… cpuUniformityHardCheckPanic=FALSE
    1. 启动后通过SSH调整系统配置
      启动进入ESXi系统后,通过SSH连接到主机,并执行以下命令以永久应用修改:
      1
      esxcli system settings kernel set -s cpuUniformityHardCheckPanic -v FALSE
      此命令将启动参数持久化,确保每次启动ESXi时都应用该设置,防止紫屏问题再次出现。
    1. 配置NVIDIA显卡直通
      为了在虚拟机中成功直通NVIDIA显卡,还需要进行特定的配置
    • lspci -v | grep -i nvidia
      1
      2
      3
      4
      0000:81:00.0 Display controller 3D controller: NVIDIA Corporation Device 26ba
      0000:82:00.0 Display controller 3D controller: NVIDIA Corporation Device 26ba
      0000:c1:00.0 Display controller 3D controller: NVIDIA Corporation Device 26ba
      0000:c2:00.0 Display controller 3D controller: NVIDIA Corporation Device 26ba
    • lspci -v | grep -i nvidia -A1
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      0000:81:00.0 Display controller 3D controller: NVIDIA Corporation Device 26ba
      Class 0302: 10de:26ba
      --
      0000:82:00.0 Display controller 3D controller: NVIDIA Corporation Device 26ba
      Class 0302: 10de:26ba
      --
      0000:c1:00.0 Display controller 3D controller: NVIDIA Corporation Device 26ba
      Class 0302: 10de:26ba
      --
      0000:c2:00.0 Display controller 3D controller: NVIDIA Corporation Device 26ba
      Class 0302: 10de:26ba
    • 编辑ESXi配置文件:
      通过SSH连接到ESXi主机,执行以下命令将显卡设备标记为直通设备:
      1
      2
      3
      4
      echo '/device/0000:c2:00.0/owner = "passthru"' >> /etc/vmware/esx.conf
      echo '/device/0000:81:00.0/owner = "passthru"' >> /etc/vmware/esx.conf
      echo '/device/0000:c1:00.0/owner = "passthru"' >> /etc/vmware/esx.conf
      echo '/device/0000:82:00.0/owner = "passthru"' >> /etc/vmware/esx.conf
      其中,0000:01:00.0为NVIDIA显卡的PCI地址,请根据实际硬件调整。
    • 更新Passthru映射文件:
      为了确保显卡的各项功能能够正确直通,需在passthru.map文件中添加相关配置。执行以下命令:
      1
      2
      3
      echo '10de 26ba bridge false' >> /etc/vmware/passthru.map
      echo '10de 26ba link false' >> /etc/vmware/passthru.map
      echo '10de 26ba d3d0 false' >> /etc/vmware/passthru.map
      这里的10de 26ba代表NVIDIA显卡的厂商ID和设备ID,请根据你的显卡型号进行相应调整。
    • 重启ESXi服务:
      为使上述配置生效,需要重启ESXi的管理代理服务。执行以下命令:
      1
      2
      /etc/init.d/hostd restart
      /etc/init.d/vpxa restart
      或者,您也可以选择重启整个ESXi主机。

虚拟机配置

  • 创建虚拟机及配置参数
    • 预留全部内存
      wUml1N
    • 在“虚拟机设置”中,点击“添加其他设备” > “PCI设备”,在列表中找到并勾选NVIDIA显卡(例如,0000:c1:00.0)。
      PZmAZx
    • 取消UEFI安全启动
      jQILo6

为了优化GPU直通的性能和兼容性,需要在虚拟机的高级配置中添加以下参数:

1
2
3
4
5
6
# 该参数用于隐藏虚拟化环境,使得虚拟机能够更好地识别并利用NVIDIA显卡。
hypervisor.cpuid.v0 = FALSE
# 启用64位内存映射输入/输出(MMIO),提高显卡的内存访问效率。
pciPassthru.use64bitMMIO = TRUE
# 设置64位MMIO的大小,确保显卡有足够的内存资源进行高性能计算和渲染任务。
pciPassthru.64bitMMIOSizeGB = 128

pciPassthru.64bitMMIOSizeGB计算方式 https://earlruby.org/tag/use64bitmmio/
64bitMMIOSizeGB值的计算方法是将连接到VM的所有GPU上的显存总量(GB)相加。如果总显存为2的幂次方,则将pciPassthru.64bitMMIOSizeGB设置为下一个2的幂次方即可。
如果总显存介于2的2次方之间,则向上舍入到下一个2的幂次方,然后再次向上舍入。
2的幂数是2、4、8、16、32、64、128、256、512、1024…
例如虚拟机直通两张24G显存的显卡,则64bitMMIOSizeGB应设置为128。计算方式为24*2=48,在32和64之间,先舍入到64,再次舍入到128

BCylVm

linux 驱动安装

  • 内核版本及更新

    1
    2
    uname -r
    sudo dnf update -y
  • 安装基本开发工具

    1
    2
    sudo dnf install epel-release -y
    sudo dnf groupinstall "Development Tools" -y
  • 内核制备

    安装内核开发包;提高兼容性,安装与当前内核版本匹配的内核头文件

    1
    2
    sudo dnf install kernel-devel -y
    sudo dnf install kernel-headers-$(uname -r) -y
  • 安装 Dynamic Kernel Module Support (DKMS)

    DKMS 会在内核更新发生时自动重建内核模块,确保您的 NVIDIA 驱动程序在系统更新后仍然正常运行:

    1
    sudo dnf install dkms -y
  • 将官方 NVIDIA CUDA 存储库添加到您的系统。对于 Rocky Linux 10,请使用 RHEL 9 兼容存储库:

    1
    2
    3
    sudo dnf config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel9/$(uname -i)/cuda-rhel9.repo
    # 更新您的包缓存以识别新的仓库:
    sudo dnf makecache
  • 在安装实际的 NVIDIA 驱动程序之前,请确保存在所有必要的依赖项:

    1
    sudo dnf install kernel-headers-$(uname -r) kernel-devel-$(uname -r) tar bzip2 make automake gcc gcc-c++ pciutils elfutils-libelf-devel libglvnd-opengl libglvnd-glx libglvnd-devel acpid pkgconfig dkms -y
  • 禁用 Nouveau 驱动程序

    Nouveau 驱动程序提供基本功能,但缺乏 CUDA 支持、最佳游戏性能和专业工作站功能等高级功能。专有的 NVIDIA 驱动程序提供完整的功能集和更好的性能优化。
    使用 grubby 命令修改内核参数并将 Nouveau 驱动程序列入黑名单:

    1
    sudo grubby --args="nouveau.modeset=0 rd.driver.blacklist=nouveau" --update-kernel=ALL
    • 为了提高安全性,创建一个黑名单配置文件
      1
      2
      echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
      echo 'omit_drivers+=" nouveau "' | sudo tee /etc/dracut.conf.d/blacklist-nouveau.conf
    • 重新生成初始 RAM 文件系统:
      1
      2
      sudo dracut --regenerate-all --force
      sudo depmod -a
  • 基本驱动程序验证

    1
    2
    3
    yum install pciutils
    sudo lspci | grep NVIDIA
    nvidia-smi
  • GUI 验证方法

    1
    nvidia-settings

参考链接

从坑中爬起:ESXi 8.0直通NVIDIA显卡的血泪经验
How To Install Nvidia Drivers on Rocky Linux 10