虚拟机启动访问vfio设备超时

今天在解决 使用libvirt和XFS在线扩展Ceph RBD设备 采用了将两个 Ceph Block Device(RBD) 设备连接到另外一个用于维护的虚拟机中处理磁盘扩容。但是,非常意外地发现,当我关闭了维护的虚拟机 z-dev 之后,想要恢复原先使用 Ceph Block Device(RBD)y-k8s-n-1 却出现vfio设备连接超时:

启动虚拟机时vfio设备报告已被使用,连接超时
error: Failed to start domain 'y-k8s-n-1'
error: internal error: qemu unexpectedly closed the monitor: 2023-08-31T13:35:04.132854Z qemu-system-x86_64: 
-device vfio-pci,id=hostdev0,sysfsdev=/sys/bus/mdev/devices/3eb9d560-0b31-11ee-91a9-bb28039c61eb,display=off,bus=pci.7,addr=0x0: 
vfio 3eb9d560-0b31-11ee-91a9-bb28039c61eb: error getting device from group 123: Connection timed out
Verify all devices in group 123 are bound to vfio-<bus> or pci-stub and not already in use

这里的报错繁忙设备 3eb9d560-0b31-11ee-91a9-bb28039c61ebvirsh dumpxml y-k8s-n-1 可以看到其实就是 vGPU快速起步 配置的2个 NVIDIA Virtual GPU (vGPU) 设置之一:

执行 vgpu_create 脚本创建2个 P40-12C NVIDIA Virtual GPU (vGPU) 输出信息第 个vgpu设备
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='off'>
    <source>
        <address uuid='3eb9d560-0b31-11ee-91a9-bb28039c61eb'/>
    </source>
</hostdev>

这是一个 mdev 设备 ( VFIO Mediated devices 设备)

回顾 安装NVIDIA Virtual GPU Manager 笔记可以看到,需要首先确保 nvidia-vgpu-mgr.service 正常运行,也就是说,必须先 vgpu_unlock

  • 检查 nvidia-vgpu-mgr.service 状态:

检查 nvidia-vgpu-mgr 服务状态
systemctl status nvidia-vgpu-mgr.service

果然,再次发现这个服务启动正常退出(实际上只要执行一次就可以,返回success)。但是,回到了老问题: vgpu_unlock 失效了

查询 vgpu :

nvidia-smi vgpu -q 查询vGPU
nvidia-smi vgpu -q

输出显示只激活了 0 个vGPU:

nvidia-smi vgpu -q 查询vGPU显示只有 0 个vGPU
GPU 00000000:82:00.0
    Active vGPUs                          : 0

我想起来了, vgpu_unlock 需要使用 动态内核模块支持(DKMS) 模块方式安装 NVIDIA Virtual GPU (vGPU) 驱动。最近依次我升级了内核,内核升级时会重新编译安装 NVIDIA Virtual GPU (vGPU) 模块。我重新检查一遍流程,发现原先修订的过程都正确。

这个问题暂时无解,只要重启一次操作系统,就能恢复激活