WD NVMe Device Drivers ======================== Current Windows Version: 3.0.1902.0413 (Microsoft Certified) Current Linux Version: 2.0.1706.0813 Current UEFI Version: 1C58:0023:105C TABLE OF CONTENTS ================= 1.0 Introduction 2.0 Windows Driver Install Instructions 3.0 Linux Driver Install Instructions 4.0 UEFI Notes 5.0 Fixes/Enhancements 6.0 Additional Information 1.0 Introduction ================ Western Digital provides Windows and Linux device drivers for its Ultrastar SN200 Series of PCIe NVMe SSDs. The WD download site lists these device drives by model, but the drivers are identical between the SFF (SN200) and the HHHL (SN260) models. On some versions of Windows Server, Red Hat, and SLES you have the option of using the NVMe driver which is prepackaged with the O/S, or download and use the WD specific device driver. The core I/O properties would be very similar between the inbox and WD specific driver. For Windows: We recommend usage of the WD device driver which supports additional vendor unique commands. It also supports the WD Device Management (HDM) application which provides a cmdline interface to get/set device attributes. For Linux: Many customers are satisfied with the open-source driver which is bundled with the O/S. Both HDM and the open-source nvme_cli tools can get/set device attributes. Our Engineers are contributors for the NVMe open-source community. However, patches we provide may not be incorporated immediately. Therefore, WD Support may ask you to use the WD driver if you are looking for either an urgent or device specific fix. 2.0 Windows Driver Install Instructions ======================================= Supported Platforms (as of March 2019) Server 2012R2 Server 2016 Server 2019 Pre-Req If you have a previous version of the WD NVMe device driver installed, we recommend that you uninstall that instance prior to installing an updated version. Method: Control Panel -> Programs and Features -> Uninstall a Program -> select WD driver -> r-click -> uninstall Install 1. Download the correct installer for the target Windows Server platform, either 2012-R2 or 2016 2. Run the installer and follow the prompts. Both the installer and device driver are signed with an Extended Validation certificate. Depending upon the security settings of your system, you may see a security dialog prompt during the install sequence. You have the option of trusting this WD certificate for this install instance or set ongoing trust with this WD certificate. 3. Upon completion of the install, Windows may prompt for a reboot 4. The WD device driver attributes can be viewed with Device Manager -> Storage controllers -> WD NVMe Storport Miniport 3.0 Linux Driver Install Instructions ===================================== Supported Platforms (as of Aug 2017) RHEL 6.8, 6.9, 7.2, 7.3 RHEL Notes: 7.4 is not yet supported. This version of RHEL was just released. SLES 11.3, 11.4, 12.1, 12.2 SLES Notes: 12.3 is not yet supported. This version of SLES is currently in beta. The Linux driver is shipped as a Dynamic Kernel Module Support (dkms) source rpm. DKMS, GCC, and the kernel-devel packages are pre-reqs for installing this driver. Advantage for using DKMS: the driver binary will automatically be rebuilt if necessary with each kernel update. For RHEL you can find the DKMS rpm in the EPEL (6 or 7) repository: https://dl.fedoraproject.org/pub/epel/ For SLES you can find the DKMS rpm in the PackMan repository: http://packman.links2linux.org/package/dkms Note: A new install of the current DKMS pre-req rpm, misses one important step which can be resolved simply. Problem: DKMS scripts are installed in /usr/lib/dkms. However, some gcc-make steps will look in /usr/lib64/dkms (not found) Resolution: Create a symlink called dkms from /usr/lib64 to /usr/lib/dkms (cd /usr/lib64 ; sudo ln -s ../lib/dkms dkms) When installing the device driver rpm, if you see an install error such as: Module build for kernel x.x was skipped since the kernel source for this kernel does not seem to be installed. Then Remove the device driver rpm, ensure the dependencies are installed, then reinstall the device driver rpm Uninstall It is recommended that you uninstall the previous version of the Linux WD NVMe device driver. However, it's not required. 1. sudo rpm -qa | grep nvme-WD (to list the rpm name) 2. sudo rpm --erase "name of rpm" (invokes dkms remove cmd, and cleans the rpm db) Install 1. Verify pre-reqs: sudo rpm -qa | egrep -i 'gcc|kernel-devel' 2. Install: sudo rpm -ivh WD-NVMe-2017060813-dkms.noarch.rpm 3. Bind the driver to the device: sudo modprobe nvme-WD Other steps to consider: sudo rmmod nvme (to remove the inbox driver binding) Update the blacklist.conf file to prevent the inbox driver from auto-binding upon system restart Example for /etc/modprobe.d/blacklist.conf # To prevent module from being loaded at boot blacklist nvme 4. List device characteristics: sudo lspci -v -d 1c58: 5. List the default NVMe namespaces: sudo lsblk 6. Use either the hdm or nvme_cli tool to query/set device attributes SLES specific notes: 1. Modify /etc/modprobe.d/10-unsupported-modules.conf Set allow_unsupported_modules 1 2. Starting in kernel levels 4.4, the NVMe device driver has been split into 2 components: nvme and nvme_core This change was required to enable the technology NVMe over Fabrics. Here are some installation notes: A) You will see dependency warning messages when you first install this rpm. The DKMS process is letting you know that both the inbox nvme driver and this WD nvme driver are using dependencies with identical names. These messages can be safely ignored because you will not be able to run both of these nvme device drivers at the same time. We've noticed at kernel level 4.4.59-92.24 and newer, these unnecessary warnings have been eliminated. B) After installing our driver on SLES 12.2 you'll need to first remove the inbox driver and then insert the WD driver module. Sample commands: > sudo rmmod nvme_core ; sudo rmmod nvme ; lsmod | grep nvme > sudo modprobe nvme-core-WD ; sudo modprobe nvme-WD ; lsmod | grep nvme You can optionally toggle back to the inbox nvme driver by reversing that logic Sample commands: > sudo rmmod nvme-core-WD ; sudo rmmod nvme-WD ; lsmod | grep nvme > sudo modprobe nvme_core ; sudo modprobe nvme ; lsmod | grep nvme C) As indicated in the generic install steps, you can control module selection across reboots by using the blacklist file. Here's some sample input which can be appended to /etc/modprobe.d/50-blacklist.conf #-- To prevent module from being loaded a boot blacklist nvme # will not insert at boot time #blacklist nvme-WD # will insert at boot time 4.0 UEFI Notes ======================= The UEFI driver is part of the device FW, rather than a kernel module to be installed. If your system is booting in legacy BIOS-mode, then this UEFI driver is never invoked. When booting in UEFI-mode, this UEFI driver executes after the system FW has completed its startup logic and before the O/S initialization is invoked. Our UEFI driver is signed by Microsoft which allows for execution of the optional system feature called Secure Boot. The UEFI driver creates some system configuration panels which can be viewed in the Setup function of your system. Historically this has been called BIOS configuration. The selectable element within the system configuration is called WD NVMe Device Configuration. You'll see several read-only attributes such as Vendor Identification (or Model number), Serial, Capacity, FW Version, and Bus location. The subpage provides an optional mechanism for updating the device FW. We state optional because there are also other methods for updating the device FW from the operating system layer. If we need to release an updated UEFI driver for the SN2xx series, we'll provide some examples for updating the device F/W. 5.0 Fixes/Enhancements ======================= * March 2019 Windows: - Obtained Server 2019 certification - Single device driver instance supports both Server 2016 & Server 2019. - Updates to migrate from HGST to Western Digital, including new license file - Small performance enhancement in the driver code - Add support for SN620 Skyhawk NVMe device - Using new compiler flag for Spectre/Meltdown mitigation - Adjust setting for Max lba's per unmap * August 2017 Initial driver release for SN2xx NVMe devices Enhancements: Support NVMe Specification 1.2 Linux: Add AER and SGL support Updates for newer kernels Windows: Updates for Server 2016 Support specification 1.5 of SCSI to NVMe Translation Layer (SNTL) Improved event logging Specific changes which are noteworthy: A) NVMe 1.2: Support for namespace management B) Scsi to NVMe Translation: Support for Scsi Persistent Reservations Changes to align with some features of the Windows inbox driver: A) IOCTL_STORAGE_QUERY_PROPERTIES: Allow host software to issue a select few NVMe commands to the device. (NVMe Identify, Get Log, and Get Features commands.) B) IOCTL_SCSI_MINIPORT_FIRMWARE: Allow host software to manage device firmware through FIRMWARE_FUNCTION_GET_INFO, FIRMWARE_FUNCTION_DOWNLOAD, and FIRMWARE_FUNCTION_ACTIVATE Fixes: None 6.0 Additional Information ========================== If using the SN2xx device as a VMware datastore or in a VSAN environment, you will have to change the default sector-size of the namespace. Here's an example for changing the default sector size from 4096 to 512 using the HDM tool: # hdm format -p /dev/nvme?n? --sector-size 512 --metadata-size 0 --dif-level 0 DKMS Information : https://github.com/dell/dkms (for linux only) Linux driver version string: Major.Minor.YYMM.DDHH Windows driver version string: Major.Minor.YYMM.pDDHH Where "p" is our platform hint. 3 = 2012R2, 4 = 2016 While most customers will want to download and use our Windows driver installers, some system integration teams prefer the Microsoft certified driver files without the installer packaging. The content of the zip file WD-SN200-WinDriverFiles are those sys,inf, and cat driver files for each supported Windows platform. Regarding our Ultrastar SN200 and SN260 devices, you can find the latest F/W, S/W, Drivers, and Documentation links under https://www.westerndigital.com/support