SEF Linux™️ Driver
Although an Software-Enabled Flash™️ (SEF) Unit reports as an NVMe 2.0 device, it requires its
own sef.ko
device driver and a customized nvme.ko
driver. With a kernel version of 6.3, the only
customization is to recognize an SEF Unit’s non-standard PCI™️ storage class. This requirement
is expected to be dropped in future firmware.
The sef.ko
driver is stacked on the nvme.ko
and nvme-core.ko
drivers. It enumerates the NVMe
devices /dev/nvme0
through /dev/nvme255
. For every /dev/nvmeX
that supports the SEF
alternate command set, it creates a corresponding /dev/sefX
device. A /dev/sefXnY
is also
created for every /dev/ngXnY
as well.
The following functionality is implemented by the SEF Unit driver.
- Translates NVMe device udev asynchronous-event-notifications (AENs) into namespace-AEN udev events.
- Keeps paired commands on the same submit queue.
- Triggers refresh of QoS Domain and Virtual Device information when affected by SEF admin commands.
- Publishes device and namespace information via sysfs so discovery does not require root privileges.
- Adds support for metadata-only reads.
- Flushes delayed writes before the nvme-core driver’s namespace enumeration freezes and flushes a device’s queues.
The SDK always uses the SEF driver but either device driver can be used to communicate with an
SEF Unit. Sending admin commands to the NVMe device may cause sef-cli
to return out-of-date
information. sef.ko
is required for its extended functionality, and in specific cases, it is more
efficient to use.