vGPU Device Manager: no SR-IOV / vendor-specific VFIO vGPU creation on Ada Lovelace / Hopper (mdev-only)
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 2.9k
- Forks
- 552
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 90
Description
Summary
The vGPU Device Manager (nvidia-vgpu-device-manager) is built around the legacy mediated-device (mdev) framework only. On Ada Lovelace and newer GPUs (L40/L40S, RTX Ada, H100, H200, Blackwell) running the vGPU release 17/18+ host driver, the driver no longer exposes mdev — vGPU profiles are assigned per SR-IOV Virtual Function through the vendor-specific VFIO sysfs (/sys/bus/pci/devices/<VF>/nvidia/current_vgpu_type). As a result the GPU Operator has no way to create SR-IOV vGPU devices on these GPUs.
Environment
- GPU: NVIDIA H200 SXM 141GB (
10de:2335) - Host vGPU driver:
580.159.01(NVIDIA vGPU release 18,-vgpu-kvm) - Kernel: 6.8
- GPU Operator in sandbox mode:
sandboxWorkloads.enabled=true, node labelnvidia.com/gpu.workload.config=vm-vgpu vgpu-device-managerimagev0.4.2
Problem
On this GPU /sys/bus/mdev/ does not exist by design — the driver uses the vendor-specific VFIO framework (nvidia-smi -q reports Host VGPU Mode : SR-IOV). vGPU is configured per VF: after /usr/lib/nvidia/sriov-manage -e <BDF>, each VF exposes /sys/bus/pci/devices/<VF>/nvidia/{creatable_vgpu_types, current_vgpu_type, gpu_instance_id, placement_id, ...}, and a vGPU is created by writing a type id to current_vgpu_type. There is no mdev bus for the device manager to walk, so it cannot enumerate or create vGPU devices — matching the failure reported in #591:
error getting vGPU config: error getting all vGPU devices: unable to read MDEV devices directory: open /sys/bus/mdev/devices: no such file or directory
With a host-installed driver the vgpu-device-manager init container instead blocks indefinitely on waiting for NVIDIA vGPU Manager to be setup. Either way there is no operator path to create SR-IOV vGPUs on Ada/Hopper.
The rest of the stack is ready — only operator-side creation is missing
- KubeVirt consumes these VFs. Its PCI device plugin recognizes a VF bound to the
nvidiadriver oncecurrent_vgpu_type != 0and advertises it — kubevirt/kubevirt#16890 (merged 2026-04-14), available in KubeVirt v1.9 (v1.9.0-beta.0; the added filepkg/virt-handler/device-manager/nvidia.gois present in v1.9.0-beta.0 but not in the v1.8.x releases /release-1.8). The design discussion in kubevirt/kubevirt#17642 explicitly scopes vGPU profile assignment (current_vgpu_type) as a node-level concern forgpu-operatoror a custom DaemonSet — i.e. exactly what this issue asks the operator to do. - Manual creation works:
sriov-manage -e+echo <type-id> > .../nvidia/current_vgpu_typeyields a working, KubeVirt-consumable vGPU (validated on H200 with a whole-card profile). - Rebinding VFs to
vfio-pciis not a workaround — unbinding the VF resetscurrent_vgpu_typeto 0.
Request
Add support in vgpu-device-manager (or a dedicated component) for the vendor-specific VFIO / SR-IOV per-VF model (current_vgpu_type), so vGPU devices are declaratively created on Ada Lovelace / Hopper / Blackwell, analogous to what already works for mdev GPUs today. The downstream discovery/advertisement side is already handled by KubeVirt.
References
- #591 — mdev-era predecessor (2023, closed as stale); the underlying gap persists for current SR-IOV vGPU hardware.
- kubevirt/kubevirt#17642, kubevirt/kubevirt#16890 — KubeVirt-side support for the vendor-specific VFIO framework (implemented).
- Same gap tracked elsewhere: OpenNebula/one#6841, harvester/harvester#6487, cloud-hypervisor/cloud-hypervisor#7572.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at vgpu-device-manager's existing mdev-only discovery and creation flow, then inspect the vendor-specific VFIO paths under /sys/bus/pci/devices//nvidia and the sriov-manage entry point. Compare the required per-VF profile assignment through current_vgpu_type with the existing mdev behavior. Done means Ada, Hopper, and Blackwell VFs can be configured declaratively while existing mdev GPU support remains intact.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, kubernetes, linux
- Domain
- devops, infrastructure
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100