# FEMU Introduction ###### tags: `Accelerator` ### SSD Research Category ![](https://i.imgur.com/At7pD5Q.png =400x) > "[E] software SSD emulator" seems not support "[R] RAID of SSDs (flash array) and [D] distributed/multi-node SSDs" * scale * [1]: single SSD * [R]: RAID of SSDs (flash array) * [D]: distributed/multi-node SSDs * platform * [C]: commodity SSDs * [E]: software SSD emulator * [H]: hardware platforms * [S]: trace-based simulator * layer * [A]: application layer * [K]: OS kernel * [L]: low-level SSD controller logic ### Why FEMU? #### Better than other platforms * following platforms only support internal-SSD research, but not kernel-level extensions. * [S] trace-based simulator: DiskSim+SSD, FlashSim, SSDSim * following platforms support full-stack research, but their high costs. * [H] hardware platforms: FPGA boards, OpenSSD, OpenChannel SSD * following platforms are cheap, but either outdated, non-scalable, or not open-sourced. * [E] software SSD emulator: VSSIM, FlashEm, LightNVM’s QEMU | | [S] simulator | [E] emulator | [H] hardware platform | | ------------------- | ---------------------- | -------------------------- | --------------------- | | Full-stack Research | Internal-research only | O | O | | Cheap | -------- | O | X | | Accurate | -------- | FEMU: soso<br>others: poor | O | | Scalable | -------- | FEMU: good<br>others: poor | -------- | | Extensible | -------- | FEMU: good | -------- | #### FEMU's Limitation * Not able to emulate large-capacity SSD * because FEMU is DRAM-backed * There is room for improving accuracy ### What is FEMU? * FEMU is QEMU-based flash emulator * QEMU is full-system emulator * It supports emulating different types of SSDs: * **Whitebox mode (OCSSD)** (a.k.a. Software-Defined Flash (SDF), or OpenChannel-SSD) with host side FTL (e.g. LightNVM or SPDK FTL) * **Blackbox mode (BBSSD)** with FTL managed by the device (like most of current commercial SSDs). A page-level mapping based FTL is included. * **ZNS mode (ZNSSD)**, exposing NVMe Zone interface for the host to directly read/write/append to the device following certain rules. * **NoSSD mode**, emulating a as-fast-as-possible NVMe device with sub-10 microsecond latency. This is to emualte SCM-class block devices such as Optane or Z-NAND SSDs. #### FEMU Architecture ![](https://i.imgur.com/9gpdDgy.png) ![](https://i.imgur.com/7VnSJhr.png =800x) ### How FEMU works? ### Reference 1. 2018 USENIX, [The CASE of FEMU: Cheap, Accurate, Scalable and Extensible Flash Emulator](https://www.usenix.org/system/files/conference/fast18/fast18-li.pdf), [slides](https://www.usenix.org/sites/default/files/conference/protected-files/fast18_slides_li.pdf), [pdf](https://newtraell.cs.uchicago.edu/files/ms_paper/huaicheng.pdf)