Solid State Drives/NVMe
NVM Express (NVMe) is a specification for accessing SSDs attached through the PCI Express bus. As a logical device interface, NVM Express has been designed from the ground up, capitalizing on the low latency and parallelism of PCI Express SSDs, and mirroring the parallelism of contemporary CPUs, platforms and applications.
The Linux NVMe driver is natively included in the kernel since version 3.3. NVMe devices should show up under
Extra userspace NVMe tools can be found inAUR or AUR.
See Solid State Drives for supported filesystems, maximizing performance, minimizing disk reads/writes, etc.
NVMe SSDs are known to be affected by high operating temperatures and will throttle performance over certain thresholds.
Raw device performance tests can be run with:
# hdparm -Tt --direct /dev/nvme0n1
Power Saving APST
NVME Power Saving Patch
Andy Lutomirski has created a patchset which fixes powersaving for NVME devices in linux. Currently, this patch is not merged into mainline yet. Until it lands in mainline kernel use the AUR or REPO linked below. Linux-nvme — Mainline linux kernel patched with Andy's patch for NVME powersaving APST.
As of Kernel 4.11, the patch has been merged into mainline and is no longer necessary.
To test if NVME Power Management is working, install
nvme get-feature -f 0x0c -H /dev/nvme
When ASPT is enabled the output should contain "Autonomous Power State Transition Enable (APSTE): Enabled" and there should be non-zero entries in the table below indicating the idle time before transitioning into each of the available states.
If ASPT is enabled but no non-zero states appear in the table, the latencies might be too high for any states to be enabled by default. The output of
nvme id-ctrl /dev/nvme should show the available non-operational power states of the NVME controller. If the total latency of any state (enlat + xlat) is greater than 25000 (25ms) then to enable it you must pass a value at least that high to the
default_ps_max_latency_us option for the
nvme_core module in the boot parameters. This should enable ASPT and make the table in
nvme get-feature show the entries.