The HP T620 is a "thin client" that is several years old, but still a quite capable little mini PC or server. However, the built-in storage is typically a 4 or 8gb M.2 SATA (NGFF) solid state drive, which is a little too small for many use cases. Because M.2 SATA drives are less popular than NVMe drives, they're more expensive per gigabyte. The T620 has a mini PCIe slot inside (typically used for a wifi card), which this card adapts to an M.2 PCIe slot suitable for an NVMe SSD.
I've installed my adapter board, with a cheap SK Hynix 128G SSD, into my T620. Since I don't have any M1.6 screws, I've temporarily secured it with some kapton tape.
It works!
I've installed Ubuntu on it (using the SATA SSD that came with the T620 as the /boot drive. I am assuming that the BIOS doesn't know how to boot NVMe drives, but I haven't tested it.)
Benchmarks
I've used fio to benchmark the drive, per these instructions. All tests are done with 8 threads, queue depth 64.
Test
Results
Write throughput (1M writes)
303 MB/s
Write IOPS (4k writes)
12019.74 IOPS
Read throughput (1M reads)
454 MB/s
Read IOPS (4k reads)
38080 IOPS
The read throughput seems to have nearly saturated the PCIe connection: the mPCIe only has one PCIe v2 lane, which has a theoretical max speed of 500MB/s.
Observations
I noticed that with the NVMe drive in place, Ubuntu names my network interface enp2s0, whereas without the NVMe drive, the interface is called enp1s0. This means if you take an existing install and add an NVMe drive to it with this adapter, your network configuration might break. I was able to fix this by editing /etc/netplan/00-installer-config.yaml and adding an entry for enp2s0 underneath the entry for enp1s0:
$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp1s0:
dhcp4: true
enp2s0:
dhcp4: true
version: 2
Just an idea, did you think about using the pcie 4x RISER pins next to the RAM slots for nvme? people soldered pcie socket there and it worked - making t620 plus out of it. some custom pcie to m2 adapter pcb soldered directly on top of those pins could be doable
Yeah, I thought about that -- in order to fit it into the existing case, I think I'd want something which lies parallel to the motherboard, which would probably rule out a standard PCIe socket. I'm imagining you could just use header pins of the right pitch, but then the modification would be permanently soldered in. Maybe pogo pins could work?
Yes, due to size I was thinking about permanent solution, with big enough holes it could be just filled with solder to make contact? and it could go to left where is more space. Nort sure if 2280 ssd could fit horizontally (when looking at pcb photo) but smaller ssd could fit or it could go down where the msata missing socket is.
Hello, this is interesting that you got gen2 pci-e speeds with t620. I was trying the same for T630 which has M2 slot for wifi and I got A+E M2 to NVME adapter https://www.aliexpress.com/item/1005004941794180.html and unfortunately I only get gen1 speed :-( I hoped t630 with GX-420GI could even have gen3 as per https://www.amd.com/system/files/documents/i-family-product-brief.pdf but no luck. I wonder if bios could have downgraded the pci-e bridge to lower speeds at boot time for power saving or something. In linux via lspci the pcie bridge is shown as having only 2.5GT/s speed :-(
I even tried trick mentioned here https://community.osr.com/discussion/comment/279932/#Comment_279932 but no change when writing to those PCI registers.
I wonder if there's a PCI bridge in the way that's limited to gen2, or perhaps the 4 lanes of the "PCIe Gen 2/3 4x1" have to be the same speed, so they're limited to the lowest common denominator?
I have disabled ethernet in bios and whole 00:02.2 PCI bridge: ... Processor Root Port was gone and it did not help, 02.3 was still there with nvme like before, still only 2.5GT speed, so looks like it is not the lowest common denominator. So I guess it is either the hardware or some power saving/stability configuration done by BIOS at boot time as they expect that both ethernet and wifi is just 2.5GT device :-(
just FYI found relevant document - bios and kernel development guide for t630 chipset, pcie is described here https://www.amd.com/system/files/TechDocs/50742_15h_Models_60h-6Fh_BKDG.pdf#page=158 , the VID/PID numbers in this document matches my hardware. on page 161 it says "All PCIe links are capable of supporting 2.5/5.0/8.0 GT/s data rates." however on page 164 it says " 2.11.4.4.2 ... Note that Gen3 support is only for the graphics link". Still maybe there is a way to enable gen2 at least via those registers described there. However that will probably be a bit slower than SATA 600 speed.
Small followup. I got one T620 and indeed this one goes to gen2 5GT/s just fine. I also got S920 thin client (siimilar AMD chipset) and there was same issue. Fortunately there was undocumented hidden bios option " PSPP (PCIE Speed Power Policy)" settable via command line tool. Unfortunately similar tool for HP bioses does not have this option so with T630 I am out of luck . Still it definitely looks like software configuration issue done in BIOS.
It does work! I'm not selling them at the moment, but I was thinking I might try setting up a Tindie shop for these. I'm not sure what a good price would be, though. I imagine that they'd be low enough volume that I'd be making a trip to the post office for every sale, which might require a high enough price that nobody would buy them. In the mean time, the design files are on github: https://github.com/EvanKrall/minipcie_nvme_adapter - I had the boards made at JLCPCB for $8+shipping for 5 boards, and got parts at Digikey (SM3ZS067U410AMR1000 and SM3ZS067U410-NUT1-R1200) for $2-3/board in small quantities -- I still need to find a good part number for the screws.
Great work! Knowing this worked i found this one as an alternative.
https://nl.aliexpress.com/item/1005005450500391.html?spm=a2g0o.order_detail.order_detail_item.4.1d846d76NCSD8v&gatewayAdapt=glo2nld
With the flexible cable i was able to mount it in one of the original screw holes.