01
virtio-nvgpu — one consumer NVIDIA card, four VMs, within 2% of bare metal, and no IOMMU between them
virtio-nvgpu (Rust device crate under Apache-2.0, GPL-2.0 guest kernel module, BSD-3-Clause-or-GPL protocol headers; 161 stars, 107 commits, 2 contributors, created March 31, no tagged releases, marked experimental) gives a Linux KVM guest near-native access to an NVIDIA GPU the host keeps using. Existing options force a choice. VFIO passthrough gives one VM the whole card and takes it away from the host. virtio-gpu with Venus shares the card but serializes every Vulkan call in the guest and replays it on the host, which the README puts at around 2,000 boundary crossings per frame, and it leaves buffers host-owned so the guest cannot encode video on the GPU. The DRM native context path that fixes this on Intel and AMD does not exist for NVIDIA. virtio-nvgpu forwards at the kernel-driver level instead: the guest module registers /dev/nvidia* and passes ioctls and mmaps across a virtqueue, and the guest runs NVIDIA's own user-mode libraries unmodified, building command buffers locally. Measured on an RTX 3060, any frame that takes the host 2 ms or more renders within 2% of bare metal in the guest; a guest used 0.37 s of CPU against the host's 0.40 s over the same run; and over 813,691 frames the backend handled one message per 59 frames. Four guests on one card split 103.7 fps evenly, and four encoded H.264 through NVENC at 60 Hz at once.
The security section is the reason to trust the rest. It says there is no IOMMU boundary between guest GPU work and the host: the card stays in the host's IOMMU domain, the GPU's own MMU is what separates a guest from host memory, and so the host NVIDIA driver is in the trusted computing base. Ioctls the ABI profile does not describe are refused, but resource-allocation classes, control commands, UVM and modeset ioctls are not yet filtered, and the planned per-guest sandboxed helper exists only as a design note. The README's own words: "attack-surface reduction, not hardware isolation." Its benchmark file has a "What these numbers do not support" section too, with no comparison against another hypervisor, four guests rather than many, synthetic vkcube loads rather than a real game, and one card on one driver. In the HN thread (116 points), a commenter asked how it differs from gVisor's nvproxy, which the README names as its inspiration. The author said they borrowed much of nvproxy's architecture, built it out for graphics workloads, and made it reusable in other VMMs. Asked about Windows guests, the author said not yet, but they are on the roadmap.
Reach for it if you run Linux VMs that need a real NVIDIA GPU for rendering or encoding and you own one card, not two; it replaces the second GPU bought for passthrough, or the vGPU license a GeForce card cannot use anyway. Delete the plan to buy a second card just so the host keeps a display. Tradeoffs: this is for trusted guests only, by its own account, and for mutually untrusted tenants VFIO or vGPU is still the answer; Linux guests only; CUDA is forwarded but not tested beyond enumeration; shipped ABI profiles cover driver 535.129.03, 580.178.04 and 595.71.05, with anything older refused, and the benchmarks come from one RTX 3060 on 595.99.02; and two contributors carry a kernel module that the host driver trusts.