Overview
Syllabus
Intro
Outline
NVMe in N Slides
Submission Queue Entry - 64 bytes
Command Queue
PCI Configuration Space
NVMe Controller Registers (MBAR)
Setting up the Admin Queues
Queue Doorbells
PCI Doorbells
Completion Queue Entries - 16 bytes
Polling for "phase" change
Interrupts
"Free'ing" Completion Queue Entries
Low-level NVMe
Putting the Theory into Practice
How Low Can You Go?
Virtual Function I/O Framework
I/O Memory Management Unit
VFIO is boiler-plate heavy
libvfio-NVMe specific functionality
Emulating this stuff
VFIO-based NVMe Controller Initialization
Identify Controller
Submitting command and kicking the queue
Wait for completion and ack
The Controller Memory Buffer
Rounding up
Taught by
Linux Foundation