Skip to content

Abstract vGPU devices behind a framework dispatch - #366

Open
yummybomb wants to merge 19 commits into
mainfrom
hypeship/vgpu-framework-abstraction
Open

Abstract vGPU devices behind a framework dispatch#366
yummybomb wants to merge 19 commits into
mainfrom
hypeship/vgpu-framework-abstraction

Conversation

@yummybomb

@yummybomb yummybomb commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Bottom layer of the vendor VFIO vGPU stack (this#322#363#364#321). Behavior-preserving refactor only — no lifecycle semantics change in this layer.

Kernel 6.8 hosts assign NVIDIA vGPUs through a vendor-specific VFIO interface instead of mdev, so the mdev-shaped seams get generalized before the new backend lands above:

  • VGPUDevice / VGPUFramework abstraction — mdev moves behind a framework dispatch (CreateVGPU / DestroyVGPU / DiscoverVGPU), with assignments described by a framework + device path instead of a bare mdev UUID.
  • Hypervisor wiring — QEMU receives the generalized vGPU path through VGPUDevicePath, while Cloud Hypervisor continues to receive the existing mdev path as a passthrough device.
  • Metadata — VF allocation tracked with a single field; instance metadata carries GPUFramework / GPUDevicePath alongside the mdev UUID.
  • QEMU args — vGPU attaches via sysfsdev, and the dead mdev branch is dropped from PCI passthrough args.

Testing

  • go build ./..., go vet clean
  • go test -race ./lib/devices/ ./lib/hypervisor/... and targeted lib/instances suites pass (TestSocketCacheKeyChangesWhenSocketIsRecreated and the network/image-dependent instances tests fail identically on the unmodified stack head in this environment)

Note

Medium Risk
Touches instance GPU lifecycle and hypervisor device attachment paths; behavior should match mdev today but mistakes could break vGPU boot or leak devices on stop/delete.

Overview
This PR generalizes vGPU handling ahead of non-mdev backends while keeping current mdev behavior on Linux.

Device layer: Adds VGPUDevice, VGPUFramework, and CreateVGPU / DestroyVGPU (Linux delegates to mdev; macOS stubs). Renames VirtualFunction.HasMdev to Allocated in discovery and GPU resource counting.

Instances: Create/start/stop/delete use the vGPU API and persist GPUFramework and GPUDevicePath (with helpers in vgpu.go for release and legacy UUID-only metadata). VM config passes VGPUDevicePath instead of stuffing mdev sysfs paths into PCIDevices.

Hypervisors: hypervisor.VMConfig gains VGPUDevicePath. QEMU always attaches vGPU with vfio-pci,sysfsdev=... and no longer treats mdev paths inside PCIDevices. Cloud Hypervisor appends the vGPU path as an extra passthrough device.

Reviewed by Cursor Bugbot for commit 47007e7. Bugbot is set up for automated code reviews on this repo. Configure here.

@yummybomb yummybomb changed the title hypeship/vgpu framework abstraction Abstract vGPU devices behind a framework dispatch Aug 6, 2026
@yummybomb
yummybomb marked this pull request as ready for review August 6, 2026 19:20
@yummybomb
yummybomb force-pushed the hypeship/vgpu-framework-abstraction branch 2 times, most recently from c3d6a2f to f677357 Compare August 6, 2026 19:40
Comment thread lib/instances/start.go Outdated
@yummybomb
yummybomb force-pushed the hypeship/vgpu-framework-abstraction branch from a903554 to 4499016 Compare August 7, 2026 20:52
@yummybomb
yummybomb force-pushed the hypeship/vgpu-framework-abstraction branch from 12bd9d9 to 0abb18e Compare August 10, 2026 18:26
Comment thread lib/instances/vgpu.go Outdated
@yummybomb
yummybomb force-pushed the hypeship/vgpu-framework-abstraction branch from 0abb18e to 5f9e4fd Compare August 10, 2026 18:58
Comment thread lib/instances/stop.go

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 33140f2. Configure here.

Comment thread lib/instances/create.go
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant