= Smartmontools NVMe support = [[TOC]] == About NVMe == VM Express, NVMe, or Non-Volatile Memory Host Controller Interface Specification (NVMHCI), is a logical device interface specification for accessing non-volatile storage media attached via PCI Express (PCIe) bus. Some links related to the standard and vendor-specific implementations provided below: - [http://nvmexpress.org/specifications/ Official specifications] - [http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/ssd-dc-p3608-spec.pdf Intel NVMe documentation] with Intel-specific log pages (CAh, C5h, DDh, C1h/C2h). - [http://ocz.com/enterprise/download/guides/ZDrive_6000_Series_Datasheet.pdf OCZ Z-Drive] specification, with vendor-specific smart log page (E0h) == Smartmontools NVMe support == Smartmontools supports NVMe starting from version 6.5. Please note, that currently NVMe support is considered as experimental. Currently implemented features: - Basic information about controller name, firmware, capacity (`smartctl -i`) - SMART overall-health self-assessment test result and warnings (`smartctl -H`) - NVMe SMART attributes (`smartctl -A`) - NVMe error log (`smartctl -l error[,NUM]`) - Ability to fetch any nvme log (`smartctl -l nvmelog,N,SIZE`) - The `smartd` daemon tracks health (`-H`), error count (`-l error`) and temperature (`-W DIFF,INFO,CRIT`) Currently NVMe support is implemented on Linux, Windows and FreeBSD. Details about supported version/driver combinations are provided in the next section. == NVMe support in the different OS == ||=OS and driver=||=Supported by OS=||=Supported by Smartmontools=||=Native management tools=||=Notes=|| ||Linux, since kernel version 3.3|| ✓ || ✓ ||[https://github.com/linux-nvme/nvme-cli nvme-cli], [https://github.com/xnox/nvme-user nvme-user] || || ||FreeBSD 9.2 or later|| ✓ || ✓ ||[https://www.freebsd.org/cgi/man.cgi?query=nvmecontrol nvmecontrol]|| || ||NetBSD|| - || - || ||Plans to add NVMe support are in the [http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/doc/roadmaps/storage NetBSD Storage Roadmap] || ||OpenBSD|| - || - || ||See [http://openbsd-archive.7691.n7.nabble.com/NVM-Express-NVMe-support-status-td289607.html this thread] || ||OSX 10.10.3 native NVMe support || ✓ || - || ||Only Apple-branded NVMe devices are supported, monitoring API is implemented (NVMeSMARTClient) but not documented || ||OSX with [http://www.macvidcards.com/nvme-driver1.html MacVidCards NVMe driver] || ✓ || - || nvme-cli tool distributed with the driver ||IOCTL format is not documented, driver is closed source || ||Oracle Solaris 11.2+|| ✓ || - ||[https://docs.oracle.com/cd/E36784_01/html/E36871/nvmeadm-1m.html nvmeadm] ||Interface is not documented || ||IllumOS [https://github.com/illumos/illumos-gate/commit/3c9168fa8e9c30d55b3aa2fde74bd7da46df53f5 NVMe driver]|| ✓ || - ||not yet implemented ||[https://www.illumos.org/issues/6235 no management interface/tool] yet implemented || ||Windows with [https://www.openfabrics.org/index.php/windows-nvm-express/nvm-express-subversion-repos.html OpenFabrics] compatible NVMe driver|| ✓ || ✓ || Various vendor specific tools || Devices are accessed via [https://svn.openfabrics.org/svnrepo/nvmewin/releases/IOCTL_Sample_App/ NVME_PASS_THROUGH] I/O-control. Successfully tested with NVMe drivers from Intel and Samsung. Should work (at least) also with drivers from OCZ. Does not work with Intel RST driver or Microsoft driver. || ||Windows 7 to 2012.R2 with [https://support.microsoft.com/en-us/kb/2990941 Microsoft NVMe driver] || (✓) || - || ?? || Older Microsoft NVMe drivers [https://social.msdn.microsoft.com/Forums/en-US/bc138b94-da4b-4851-9778-cc63ab65077b/ do not provide a NVMe pass-through I/O-control]. || ||Windows 10 with Microsoft NVMe driver || ✓ || - || ?? || [https://msdn.microsoft.com/en-us/library/windows/hardware/dn932068.aspx IOCTL_STORAGE_PROTOCOL_COMMAND] is not yet supported by smartmontools. || == Development notes Development and debugging could be performed using [https://github.com/OpenChannelSSD/qemu-nvme/ QEMU fork] which can emulates NVMe device with most of the features supported, including SMART log pages, namespaces, etc. Tested with Linux and FreeBSD, full list of the options could be found in the [https://github.com/OpenChannelSSD/qemu-nvme/blob/master/hw/block/nvme.c source code].