收起左侧

Hyper-V DDA 直通环境下,影视应用无法获取 GPU (解析非标准 PCI Bus ID 失败)

1
回复
29
查看
[ 复制链接 ]

0

主题

0

回帖

0

牛值

江湖小虾

设备环境:Hyper-V虚拟机,系统fnOS 1.1.23

BUG现象:在使用 Hyper-V 虚拟机部署飞牛 OS,并通过 DDA 技术直通 Nvidia Tesla P4 显卡时,遇到了一个底层驱动完美运行,但影视应用无法调用 GPU 转码的 Bug。

出现频率:必现

联系方式:13124783926,微信同号

我在使用 Hyper-V 虚拟机部署飞牛 OS,并通过 DDA 技术直通 Nvidia Tesla P4 显卡时,遇到了一个底层驱动完美运行,飞牛系统可以正确识别显卡,但影视应用无法调用 GPU 进行转码的 Bug。

查阅论坛后已经多篇文章提到了Hyper-V直通显卡后无法调用GPU转码的问题

关于hyper-v的显卡DDA直通问题

windows server 2025 hyper v直通dg1

经过排查,我判断问题是由于 Hyper-V DDA 生成的非标准 PCIe Domain/Bus ID 导致 mediasrv 解析硬件路径失败引起的。以下是详细的排查报告,希望能帮助团队复现并修复此问题。

一、运行环境信息

  • 宿主机: Windows Server 2022 (Hyper-V)
  • 虚拟机: 飞牛 OS (fnOS) 最新版
  • 直通方式: Hyper-V DDA (离散设备分配)
  • 显卡型号: Nvidia Tesla P4 (纯计算卡,无显存输出接口)
  • 驱动版本: 560.28.03(通过飞牛 Web UI 应用中心官方安装)

二、问题现象

  • 底层驱动完美运行:
    • SSH 终端下输入 nvidia-smi 可完美识别显卡状态、温度和功耗。

      nvidia-smi.png

    • 执行原生 FFmpeg 硬件转码测试 (ffmpeg -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 -c:v h264_nvenc test_nvenc.mp4),成功以 4.21 倍速完成转码,证明底层 CUDA/NVENC 库与 DDA 直通完美无瑕。

      ffmpeg.png

  • 上层应用识别失败:
    • 在飞牛 OS 的“影视”原生应用 -> 转码设置中,选择 Tesla P4 时,前端提示“获取 GPU 失败”。

      gpu.png

三、深度排查与日志分析

为了定位阻断点,我进行了以下排查:

1. 确认系统节点生成正常:

  • 执行 ls -l /dev/nvidia*nvidia0, nvidiactl, nvidia-uvm 均正常生成且具备读写权限。

  • 执行 ls -l /dev/dri:存在 renderD128card0

    image.png

  • 本来没找到/dev/nvidia-modeset,还以为是这个问题,手动创建后导致系统崩溃,猜测是Tesla P4为Headless GPU,不存在modeset。

  • 执行 cat /sys/class/drm/renderD128/device/vendor:输出结果为 0x10de,确认该 DRM 渲染节点属于直通的 Nvidia 显卡,而非 Hyper-V 虚拟显卡。

2. 核心报错日志定位: 查看 /usr/trim/logs/mediasrv.log,发现在点击选择 GPU 时,后台持续报错:

[error] couldn't get card path, gpu device 'GP104GL [Tesla P4]', vendor 'NVIDIA Corporation'
[warning] no gpu working, force using cpu transcoding

3. 潜在可能的原因:Hyper-V 的非标准 Bus ID 对比 nvidia-smi 的输出信息,发现在 Hyper-V DDA 直通环境下,系统分配的 Bus-Id 为: Bus-Id: 0000A2BD:00:00.0

bus-id.png

四、核心原因总结

在常规物理机或 PVE/ESXi 环境下,PCIe Bus ID 通常是规整的(如 0000:01:00.0)。但在 Hyper-V DDA 中,为了隔离硬件,微软分配了一个冗长且带有字母的虚拟 PCIe Domain 域(即本例中的 0000A2BD)。

飞牛内置的 mediasrv 服务在试图将通过 NVML 获取到的显卡信息与 /sys/class/drm/ 下的 card path 进行匹配绑定时,大概率是因为其匹配规则(如正则解析或路径截取代码)未兼容这种长格式/非标准的 PCI Domain ID,导致解析失败,在目录树中“迷路”,最终抛出 couldn't get card path 的错误并回退到 CPU 转码。

按照这个逻辑去猜测,应该所有通过Hyper-V DDA直通显卡的人都无法正常在影视中调用GPU进行转码,但是不知道为啥在论坛中有不少相册AI是可以调用GPU的,但影视也是表示均无法使用。

五、改进建议

建议研发团队核查 mediasrv 中用于探测和匹配 DRM 渲染节点的代码逻辑,兼容并放宽对 PCIe Domain ID 格式的解析规则,使其能够正确识别 Hyper-V 等特定虚拟化环境下生成的带有十六进制字母的长格式 Bus ID。

期待飞牛 OS 越来越好!如果需要更多配合测试,随时可以联系我。

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

244

主题

1万

回帖

0

牛值

管理员

fnOS1.0上线纪念勋章

已收到反馈 我转给负责的同事看看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则