收起左侧

PVE 下 fnOS 飞牛影视 vGPU 转码播放错误排障记录:NVIDIA vGPU Host/Guest 驱动版本

0
回复
46
查看
[ 复制链接 ]

1

主题

2

回帖

0

牛值

江湖小虾

PVE 下 fnOS 飞牛影视 vGPU 转码播放错误排障记录:NVIDIA vGPU Host/Guest 驱动版本不匹配

这次折腾的是 PVE 里安装的 fnOS,显卡已经做了 NVIDIA vGPU 虚拟化,fnOS 里也能看到显卡,但飞牛影视一旦选择转码播放就提示播放错误。

最后确认根因不是 Docker 配置,也不是飞牛影视本身不能用显卡,而是 PVE vGPU Host Manager 和 fnOS Guest Driver 不属于同一 NVIDIA vGPU/Grid release branch 的官方支持组合

本次排障经验我也整理成了一个 Codex Skill,方便以后复用:

Warm-rain/fix-pve-vgpu-transcoding


环境概况

  • 虚拟化平台:PVE / Proxmox VE
  • Guest:fnOS
  • 应用:飞牛影视,原生应用,不是 Docker 容器
  • GPU:NVIDIA vGPU
  • PVE Host vGPU Manager:580.126.08
  • 修复前 fnOS Guest Driver:580.65.06
  • 修复后 fnOS Guest Driver:580.126.09-grid

关键点:

飞牛影视是 fnOS 原生应用时,不需要按 Docker GPU passthrough 思路排查。
重点应该先看 guest driver、/dev/drimediasrv、ffmpeg、NVENC/NVDEC。


问题现象

fnOS 里显卡看起来是存在的,部分简单测试也能跑,但飞牛影视转码播放报错。

典型日志包括:

receive_from_worker(...) timeout 40000 ms
force kill child
neSend error, errno=-1

PVE host 内核日志里还能看到:

vgpu_mmio_fault
nvidia_vgpu_vfio

飞牛影视早期还出现过找不到 DRI card path 的情况:

couldn't get card path
no gpu working
force using cpu transcoding

排查过程

1. 先确认是不是 Docker 问题

一开始容易往 Docker GPU 配置方向想,但飞牛影视在 fnOS 里是原生应用,不是容器应用。

所以这类问题不要先去配 Docker,而是应该检查:

nvidia-smi
ls -l /dev/nvidia*
ls -l /dev/dri
ls -l /dev/dri/by-path
systemctl status mediasrv.service
tail -n 300 /usr/trim/logs/mediasrv.log

2. 检查 fnOS 里的 NVIDIA driver

修复前 fnOS 里虽然装了 NVIDIA guest driver,但实际和 PVE host vGPU manager 不匹配。

这类情况下可能出现一种很迷惑的状态:

  • nvidia-smi 可能能显示
  • 简单 h264_nvenc 可能能跑
  • 但真实视频 NVDEC + NVENC 会卡死或超时
  • 飞牛影视转码播放失败

所以不能只看 nvidia-smi


3. 对照 NVIDIA vGPU Host/Guest 官方组合

这次 PVE host 是:

580.126.08

对应的 Linux guest driver 应该是:

580.126.09-grid

也就是说,host 和 guest 不一定版本号逐字完全一样,但必须来自同一 NVIDIA vGPU/Grid release branch 的官方支持组合。

修复前 guest 是:

580.65.06

这个组合不对。


修复步骤

1. 给 VM 做快照

改驱动前一定先做快照:

qm snapshot  before-vgpu-driver-fix-$(date +%Y%m%d-%H%M%S)

2. 准备匹配的 Guest Driver

本次使用:

NVIDIA-Linux-x86_64-580.126.09-grid.run

并校验 SHA256,确认安装包正确后再继续。

3. 停止媒体和 GPU 相关服务

systemctl stop mediasrv.service 2>/dev/null || true
systemctl stop nvidia-persistenced.service 2>/dev/null || true
systemctl stop resmon_service.service 2>/dev/null || true
pkill -f 'ffmpeg|nvidia-smi' 2>/dev/null || true

4. 安装匹配的 Guest Driver

chmod +x NVIDIA-Linux-x86_64-580.126.09-grid.run

./NVIDIA-Linux-x86_64-580.126.09-grid.run

code

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则