NVMeVirt: A Versatile Software-defined Virtual NVMe Device
summary
Kernel module creates a real-looking virtual PCI device via a virtual PCI bus, runs a dispatcher thread that polls doorbells and splits NVMe commands into backend ops, and moves payloads with the DMA engine into main-memory-backed storage. Implementation is 9,000 lines of Linux C code and models a parallel FTL with GC to emulate channels/planes. It supports PCI peer-to-peer DMA and NVMe-oF offload and reproduces device performance closely (harmonic-mean error ~1.17%). In a case study, configured devices at 2.5–3.0 GB/s show MariaDB uses <0.5 GB/s while PostgreSQL consumes the high bandwidth.
AI-written summary · about
chapters (15)
- 0:00Intro
- 0:23Once upon a time in our research...
- 1:54Dilemma of Emulator
- 2:46Previous: Device Driver-level Approaches
- 3:58Previous: Virtualization-based Approaches
- 5:02NVMeVirt: Virtual NVMe Device in Software
- 6:26Challenges for Virtual PCI/NVMe Devices
- 8:44Emulating NVMe Device: Configuration Requests
- 9:09Emulating NVMe Device: I/O Requests
- 11:20Performance Models
- 12:20Evaluation
- 13:12Emulation Quality: Performance Variance
- 14:33Performance Comparison to Real Devices
- 15:07Performance Characteristics Compared to Real De
- 15:37Case Study: DBMS on Various Storage Configuratio
