= NVME Solid State Storage [[PageOutline]] NVME (nonvolatile memory express) storage is a solid state storage option to be was primarily started for use in consumer laptops but is also able to be used on Gateworks SBCs. This utilizes the PCIe lanes for communication. This is different than mSATA discussed [wiki:sata here] Note Venice SBCs don't support mSATA, thus the desire for NVME support that uses PCIe. Gateworks has a M.2 NVME adapter, the [https://www.gateworks.com/products/mini-pcie-expansion-cards/gw1614x-mini-pcie-to-m2-adapter-card/ GW16148]. == Interface Signals The biggest thing to note about NVME is that it typically uses QTY 4 PCIe lanes for super high speeds. However, Gateworks SBCs have Mini-PCIe slots that have a single Gen 1 PCIe lane. Thus, the speeds are reduced while using the Gateworks SBCs compared to the full potential, but speeds are still very fast at around 225-275MB/s. == Sizes Typical NVME sizes are 22mm wide. Some lengths quite long, designed for consumer laptops. (80mm long, 2280 defined size) These longer sizes are not compatible for the Gateworks SBCs. Thus, for a Gateworks SBC, common sizes that would be compatible are a 2230 & 2242. A 2260 will not fit on the Gateworks NVME adapter and will hang off the edge. Larger sizes will work over the interface, but note they would hang over the adapter and not secure properly. == M.2 Keys Gateworks has created an M.2 adapter for Mini-PCIe slots, but the first adapter was designed for cellular modems which often take the B-Key. Most NVME drives are M-Key. The Gateworks GW16148 Adapter uses the M-Key. Please view the [https://www.gateworks.com/products/mini-pcie-expansion-cards/gw1614x-mini-pcie-to-m2-adapter-card/ Gateworks M-Key M.2 adapter for Mini-PCIe for NVME (M-Key)]. == Software Interface NVME drives should show up in Linux as /dev/nvme0 (similar to how a microSD would show up as /dev/mmc0) == Tested Drives & Speeds As mentioned above, Gateworks SBCs only expose 1x Gen 1 PCIe lane per slot, thus the speeds achieved will not be the same as on an x86 desktop with a full 4x PCIe lanes. However, the speeds achieved are still often higher than even the onboard eMMC storage as discussed [wiki:MMC here] Gateworks has ran some sample speed tests using a GW73xx Venice SBC and the following command: {{{ dd if=/dev/nvme0n1 of=/dev/null bs=1M count=500 iflag=direct }}} ==== Tested NVME Drives for the GW16148 ||= '''Drive''' =||= '''Speed''' =||= '''Notes''' =|| || [https://www.siliconmotion.com/ Silicon Motion MD681GEDKAF3] || ~240 Megabytes/sec || 2242 size || || [https://www.sabrent.com/product/SB-1342-512/512gb-rocket-nvme-pcie-m-2-2242-dram-less-low-power-internal-high-performance-ssd/ Sabrent Rocket 512GB - 2TB ] || ~250 Megabytes/sec || 2242 size (SB-1342-512) || || [https://www.virtium.com/industrial-ssds/m2-nvme/ Virtium StorFly 8GB – 240GB] || ~260 Megabytes/sec || 2242 size, 60GB tested || || Samsung SSD980 || ~225 Megabytes/sec || 2280 size, does NOT fit GW16148 adapter || == Other Links * Host Memory Buffer (HMB) [https://unix.stackexchange.com/questions/681131/how-to-check-change-nvme-hmb-on-linux]