QEMU Emulated NVMe - Lessons Learned and Future Work
summary
QEMU implements an emulated NVMe controller that now supports NVMe v1.4, multiple namespaces (added in 2020), metadata, and namespace sharing; the original device model attaches namespaces as child devices so removing a controller inadvertently unrealizes shared namespaces, a bug exposed around QEMU 6.0. The refactor builds subsystem and namespace entities as user-creatable objects (two namespace types plus a subsystem object), retains backward compatibility, and works functionally while aiming to reduce latency by replacing sglist/iovec duality and inlining DMA/PRP handling.
AI-written summary · about
chapters (17)
- 0:00Intro
- 0:24NVMe in 1 Slide
- 1:24Emulated NVMe Timeline
- 3:46Speaking of APIs...
- 5:28A bit of history
- 6:43QDev Bus-based Plumbing
- 7:30NVMe Plumbing (pre-v6.0)
- 7:56Shared Namespaces
- 8:21Mistake: Just use -device
- 9:01NVMe Plumbing (v6.0)
- 10:03NVMe Plumbing (the "fix")
- 10:39How do we fix this properly?
- 13:04Rethinking the model
- 14:30The hw/nvme "devpocalypse"
- 17:40device VS -object
- 18:47Lesson Learned
- 19:52Future Work
related talks
32mA journey through supporting VMs with dedicated CPUs on Kubernetes
10mDemo: Nested Virtualization Acceleration
29mMutating the immutable: device hotplug in KubeVirt
43mKubeVirt - Kubernetes, Virtualization and Your Future Data Center
20mKVM-devirt: Extending KVM to a Zero-Overhead Partition Hypervisor
31mAccelerate Software and Hardware Co-Simulation Using K8s and QEMU
32mNotes on Taking KVM-on-KVM Nested Virtualization for a Spin
31mKubeVirt: What If Kubernetes Orchestrated Your VMs?
