Skip to main content

Overview

The Software-Enabled Flash™️ (SEF) Software Development Kit (SDK) is distributed in source code format and consists of the following major components:

  • SEF API: The SEF API is the Application Programming Interface, it represents a contract between an application and the implementation. The implementation is free to change as long as the API remains constant.
  • SEF Library: The SEF Library is a user mode library with a set of functions that may be used to implement the SEF API, translating the functions defined in the API into the actual commands issued to the device. To do so, the library also implements many "helper functions" that are not defined by the API, but are of general utility in either implementing the API or working around device specific restrictions/limitations. There is no contract between the library and the application for anything that is not a part of the API, and these helper functions are free to change without affecting applications. An example of a helper function is a function that manipulates or copies a scatter gather list, assisting in the cases where a single command from the perspective of the API needs to be broken up into multiple device commands due to device specific limitations. The SEF Library encompasses more than just the API; the SEF Library provides quite a bit of information on how to use and interact with the SEF Command Set.
  • SEF Reference FTL: A user mode FTL built on the SEF Library. It exposes the asynchronous SEF Block API.
  • SEF CLI: A command line tool for listing and configuring most aspects of an SEF Unit. It supports multiple target types, such as SEF Units, Virtual Devices, QoS Domains, and SEF FTL block devices.
  • SEF FIO: Provides an SEF FTL block device ioengine to the Linux I/O testing tool fio.
  • SEF QEMU Block Driver: Provides three SEF-backed block device types to QEMU: a virtual block device, a block NVMe™️ device, and a ZNS NVMe device.
  • SEF Kernel Driver: Builds the sef.ko module
  • SEF Linux: Includes the hooks required to use an SEF Unit
  • SEF NVME-CLI: Provides support for SEF subcommands.

Figure 1 shows how the components fit together.

Figure 1: SEF Components Diagram

SEF Components Diagram

The goal of the SEF SDK is to provide a software set that enables the immediate evaluation of SEF technology as well as to illustrate the use of the SEF API and SEF Library to build real world storage applications. Although the SEF SDK has been extensively tested, it is not intended for commercial use in a production environment. The SEF API is documented in the Software Enabled Flash™️ (SEF) API Specification.

This document is NOT intended to cover the design and implementation of the SEF Library, modifications to the NVMe device driver, the SEF Unit driver or the SEF utility programs. The source code for all of these components is available as part of the SDK.