-
Notifications
You must be signed in to change notification settings - Fork 13
1.1. Introduction (OX v1.4)
OX is a C-based NVMe controller solution for programmable storage devices, such as the Dragon Fire Card (DFC). It has been designed and primarily coded by Ivan L. Picoli during his PhD project at IT University of Copenhagen under the supervision of Philippe Bonnet.
The DFC has a powerful hardware, capable of running an entire operating system on its cores. That's where OX Controller takes place, intermediating between Non-Volatile memory channels and the host (over PCIe or network fabrics). The main idea behind this controller is keeping the control path on a hardware capable of running application-defined code, while the data path is linked directly to the NVM, bypassing the processing unit that controls the data flow. For a better explanation, OX has the choices of performing:
(1) WRITE:
(a) from host memory to NVM;
(b) from OX memory to NVM;
(2) READ:
(a) from NVM to host memory;
(b) from NVM to OX memory;
(a) cases: the data path is separated from control path. Managed by,
but bypassing the OX controller.
(b) cases: the data path is merged into the control path. Used by internal
data management, avoiding data movement through the interconnection
(PCIe or network fabrics) while performing processes such as
garbage collection and wear-leveling.
By programming the controller, a unique device can be modified to support emerging technologies in both host and NVM sides. OX Controller has been designed to support multiple solutions and technologies, abstracted by a set of user-specific modules registered on its core. Such modules are separated into layers (See Section 4).
Currently:
(1) on the host side:
(a) OX exposes the device as a compatible Open-Channel SSD.
(b) OX exposes the device as a standard NVMe block device (See AppNVM FTL).
(2) on the NVM side:
(a) OX abstracts the custom-made NAND DIMM designed for the DFC.
It supports multiple versions of the FPGA.
(b) OX abstracts a volatile emulation of MLC NAND, for those who
do not have the NAND DIMMs in hands.
For Open-Channel SSD, see LightNVM. For the DFC as standard NVMe block device, see AppNVM FTL.
Based on such technologies, OX becomes the link in between the application needs and the media complexity. Indeed, each type of NVM has its own constraints and limitations, but at the same time, applications have their own requirements. This assumption brings a tradeoff between media management and performance but having the media management as an essential part of a reliable system. The OX Flash Translation Layer exposes a library for application-specific FTLs and allows applications to install their own code into the control path, bringing new ways of dealing with media:
- Redundant layers are merged into a single one (e.g.: Mapping and GC);
- Unnecessary data movement is avoided (e.g. GC and wear-leveling);
- No interference among multiple tenants (by isolating I/Os
in different chunks of NVM);
- Open-Channel SSD benefits without media complexity being exposed
(by splitting the management into modules);
Such benefits are essential pieces towards application-driven storage.
Created by Ivan L. Picoli
Home
1.1 Introduction (OX v1.4)
1.2 Introduction (OX v2.x)
2. Open Channel SSDs
3. LightNVM
4. OX Controller
4.1. OX Libraries (OX v2.x)
4.2. The LNVM FTL (OX v1.4)
4.3. DFC Implementation
4.4. I/O Flow (OX v1.4)
4.5. OX Installation
5.1. OX Commands (OX v1.4)
5.2. OX Commands (OX v2.x)
6. OX Logs
7. OX-App: A Framework for Application-specific FTLs
7.1. OX-Block: The AppNVM full-fledged FTL
7.1.1. Overview
7.1.2. Bad Block Table
7.1.3. Block Metadata
7.1.4. Provisioning
7.1.5. Logical/physical mapping
7.1.6. Back-end PPA I/O
7.1.7. Front-end LBA I/O
7.1.8. Garbage collection
7.1.9. GC configuration