Skip to main content

FEMU

NVMe and CXL SSD emulation for storage systems research

FEMU is an SSD emulator built on QEMU/KVM. A guest operating system sees the emulated SSD as a real PCIe device and drives it with its own NVMe or CXL drivers, while FEMU charges NAND, channel and garbage-collection time from a timing model you configure. What you can do with it:

  1. Run storage software against a device you can change. A real guest kernel drives the emulated SSD, so file systems, databases and SPDK run unmodified. (Get started, tutorials).
  2. Study the FTL and the flash timing. Mapping schemes, garbage collection policies, write buffering and NAND timing are configurable and traced through the source. (architecture, design notes).
  3. Prototype new interfaces before the hardware exists. Zoned namespaces, Flexible Data Placement, key-value, computational storage and CXL-attached flash. (choosing a mode).
  4. Reproduce and extend published work. Pin a commit and a configuration, measure with the device counters, and cite the paper behind each mode. (reproducibility, cite FEMU).

Documents FEMU master on QEMU 10.1.0 · changelog · manual (PDF) · source

Where FEMU sits: the guest drives FEMU's NVMe or CXL device, the timing model decides when each request completes, and the data goes to the memory backend in host memory.
Where FEMU sits: the guest drives FEMU's NVMe or CXL device, the timing model decides when each request completes, and the data goes straight to the memory backend in host memory.

Devices

One binary emulates several kinds of SSD. Several namespaces of different modes can share one controller.

NoSSDfemu_mode=2DRAM device with no media timing; the control condition
BlackBox SSDfemu_mode=1Device-side FTL, garbage collection and NAND timing
FDPfdp=onFlexible Data Placement on a BlackBox SSD
ZNSfemu_mode=3Zoned namespaces with host-managed placement
Open-Channelfemu_mode=0The host runs the FTL
Key-valuefemu_mode=5The NVMe key-value command set
Computationalfemu_mode=4Programs that run on the device
CXL SSDfemu-cxl-ssdFlash behind a CXL Type-3 memory device

Choosing a mode

What it does not model

FEMU models timing, placement and wear. It does not model cells, voltages or raw bit errors, and its backing store is host memory, so data is gone when the emulator exits. The limits are written down rather than left to be discovered: model fidelity.