SSD to USB Adapter review + benchmark: asus vs inateck vs Beikell (NOT BELKIN)

vs vs

the idea:

  • problem: the motherboard has only 2x internal NVMe connectors and on a dual boot system:
    • GNU Linux occupies NVMe0
    • Windows occupies NVMe1
    • demand for fast storage has grown due to heavy use of virtualization
  • so the idea is to use: USB 3.0 connected NVMe extension disk to store large kvm vm qcow2 disk files without sacrifice too much reliability and speed

ideally in the future, motherboards should have (at least) 4x NVMe connectors at good speeds.

for this just as USB-SATA adapters an USB-NVMe adapter had to be found.

Rog Strix Arion by ASUS:

  • the pros:
    • makes NVMe work like an USB Stick
      • it says “initialize your blank ssd before use” (the terms NVMe and SSD start to get confusing)
      • but it is also possible to read an already “initialized” (partition table, formatted) NVMe
        • but it might be not the ideal choice for that use, more USB-Stick-NVMe kind of use
    • fast
    • solid heavy metal casing that distributes heat (those NVMe chips can become pretty hot)
    • nice LED light show
  • cons:
    • open and closing it could be less of an effort

how to open this thing?

the user needs a pin.

hm…. and this won an Design Award in 2020?

Imho this makes things too complicated, as if there is no pin, there is no possibility to easily swap NVMes in and out of the NVMe-USB adapter.

benchmark performance:

USB 3.0 connected, it is fast. no doubt about it. ~430MBytes/sec kind of fast.

<- those values most likely include file RAM caching.

but depending on the NVMe it might be less…

time /scripts/bench/bench_harddisk.sh
=== harddisk sequential write and read bench v1 ===
starting test on the device that holds the current directory the user is in
no need to run it as root

========== writing 3GB of zeroes ==========
0+1 records in
0+1 records out
2147479552 bytes (2,1 GB, 2,0 GiB) copied, 5,87549 s, 365 MB/s

real	0m5,919s
user	0m0,000s
sys	0m1,927s
========== reading 6GB of zeroes ==========
0+1 records in
0+1 records out
2147479552 bytes (2,1 GB, 2,0 GiB) copied, 4,94441 s, 434 MB/s

real	0m4,993s
user	0m0,000s
sys	0m2,000s
========== tidy up remove testfile ==========

real	0m10,983s
user	0m0,001s
sys	0m3,997s

So Asus planned for the user to install an NVMe and then use it like a USB Stick (no user will ever change the FlashChips of an USB Stick?)

 

also closing the device seems to be pretty hard… as the mechanism does not want to snap (again, this actually WON an design award? “The looks are great, who cares if it works” kind of award?)

Ok it is possibly, that the case closes properly with other NMVes, but the KINGSTON SA2000M81000G (some parts of it might be “too high”?) X-D

Inateck M.2 NVMe 2 USB Adapter

update: 2024-01: no failure yet, intense testing for 6 months and it does its job.

so bought the “inateck” adapter for half the price of the ASUS Adapter.

  • 10 Gbit/s
  • USB 3.2 Gen 2
  • Type C & Type A Cable included (nice!)
  • while changing NVMes is also not sooo comfortable (detaching/attaching cooling pad and metal plate, but simply with the bush of an button (orange square above) it can be opened)
    • at least this time the NVMe “fit’s in”
  • the speed is 2x twice as fast as the ASUS Adapter…

<- this is with RAM caching

# copy large file benchmark

du -BM /media/user/vms_on_nvme_usb/vms/kvm/very-large-test-file.qcow2
36270M /media/user/vms_on_nvme_usb/vms/kvm/very-large-test-file.qcow2
# -BM prints sizes in units of 1,048,576 bytes

# in GBytes
echo "scale=5; 36270/1024"|bc
35.41992

# copy file with "Inateck M.2 NVMe 2 USB Adapter" to internal NVMe via dd
# with oflag=direct ensures no caching is used
time dd if=/media/user/vms_on_nvme_usb/vms/kvm/very-large-test-file.qcow2 of=/home/user/vms/very-large-test-file.qcow2 bs=4M iflag=direct oflag=direct status=progress
38030868480 bytes (38 GB, 35 GiB) copied, 114.107 s, 333 MB/s

# in GBytes
echo "scale=5; 38030868480/1024/1024/1024"|bc
35.41900

# verify that all bits were copied correctly from A to B
# internal NVMe
time sha512sum /home/user/vms/very-large-test-file.qcow2
e9608147885148b2da3443ccb1d6b618b74cbe23c296f1289399d78bc77d9a6ad06533ad976364e69aba89856619cafc35924e839773360d7ac64ab21a459813 /home/user/vms/very-large-test-file.qcow2

real 1m19.164s
# in seconds
echo "scale=5; (1*60)+19.164"|bc
79.164
# same NVMe but connected via "Inateck M.2 NVMe 2 USB Adapter"
time sha512sum /media/user/vms_on_nvme_usb/vms/kvm/very-large-test-file.qcow2
e9608147885148b2da3443ccb1d6b618b74cbe23c296f1289399d78bc77d9a6ad06533ad976364e69aba89856619cafc35924e839773360d7ac64ab21a459813 /media/user/vms_on_nvme_usb/vms/kvm/very-large-test-file.qcow2

# yes they are still the same file

real 2m8.522s
# in seconds
echo "scale=5; (2*60)+8.522"|bc
128.522

# so the same NVMe internal connected is
echo "scale=5; 128.522/(79.164/100)"|bc
+162.34904% faster

# using the basic dd benchmark from here

time /scripts/bench/bench_harddisk.sh
=== harddisk sequential write and read bench v1 ===
starting test on the device that holds the current directory the user is in
no need to run it as root
========== writing 3GB of zeroes ==========
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 6.71935 s, 320 MB/s
real 0m6.723s
========== reading 6GB of zeroes ==========
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 5.14096 s, 418 MB/s
real 0m5.145s
========== tidy up remove testfile ==========
real 0m11.945s

update:

bought the (same?) NVMe Inateck adapter again… it is based on:

lsusb -vvv|less
Bus 003 Device 005: ID 0bda:9210 Realtek Semiconductor Corp. RTL9210 M.2 NVME Adapter
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.20
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         9
  idVendor           0x0bda Realtek Semiconductor Corp.
  idProduct          0x9210 RTL9210 M.2 NVME Adapter
  bcdDevice           20.01
  iManufacturer           1 Realtek
  iProduct                2 RTL9210B-CG

Beikell M.2 NVMe 2 USB Adapter

the assembly was without problems. it is a USB-C to USB-C and a USB-C to USB-A cable included.

this time a different NVMe was used:

 

it is a “China” adaptation of the usually-high-quality-brand US-electronics-brand “Belkin”, this is the device on amazon.

Chipset wise it is exactly the same as Inateck’s adapter:

dmesg
[24590.669969] usb 2-2: new SuperSpeed USB device number 4 using xhci_hcd
[24590.707707] usb 2-2: New USB device found, idVendor=0bda, idProduct=9210, bcdDevice=20.01
[24590.707714] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[24590.707716] usb 2-2: Product: Best USB Device
[24590.707717] usb 2-2: Manufacturer: ULT-Best
[24590.707718] usb 2-2: SerialNumber: XXXX
[24590.802901] scsi host8: uas
[24591.206599] scsi 8:0:0:0: Direct-Access     KINGSTON  SKC3000D2048G   1.00 PQ: 0 ANSI: 6
[24591.226000] sd 8:0:0:0: Attached scsi generic sg4 type 0
[24591.228579] sd 8:0:0:0: [sdd] 4000797360 512-byte logical blocks: (2.05 TB/1.86 TiB)
[24591.229878] sd 8:0:0:0: [sdd] Write Protect is off
[24591.229880] sd 8:0:0:0: [sdd] Mode Sense: 37 00 00 08
[24591.232456] sd 8:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[24591.233811] sd 8:0:0:0: [sdd] Preferred minimum I/O size 512 bytes
[24591.233814] sd 8:0:0:0: [sdd] Optimal transfer size 33553920 bytes

# Beikell is using the same chipset as Inateck
# so it will (probably) performance wise be the same
lsusb
Bus 002 Device 006: ID 0bda:9210 Realtek Semiconductor Corp. RTL9210 M.2 NVME Adapter

time /scripts/bench/bench_harddisk.sh
=== harddisk sequential write and read bench v1 ===
starting test on the device that holds the current directory the user is in
no need to run it as root

========== writing 3GB of zeroes ==========
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 6.80264 s, 316 MB/s

real 0m6.817s
========== reading 6GB of zeroes ==========
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 5.13901 s, 418 MB/s

real 0m5.143s
========== tidy up remove testfile ==========

total: real 0m12.025s
# writing from internal NVMe to Beikell
time dd if=/home/user/vms/very-large-test-file.qcow2 of=/media/user/vms/very-large-test-file.qcow2 bs=4M iflag=direct oflag=direct status=progress
38030868480 bytes (38 GB, 35 GiB) copied, 143.375 s, 265 MB/s

real 2m23.383s

# is it still the same file?
# also compare read performance internal vs external (usb)
time sha512sum /home/user/vms/very-large-test-file.qcow2
e9608147885148b2da3443ccb1d6b618b74cbe23c296f1289399d78bc77d9a6ad06533ad976364e69aba89856619cafc35924e839773360d7ac64ab21a459813 /home/user/vms/very-large-test-file.qcow2

real 1m19.156s
echo "scale=5; (1*60)+19.156"|bc
79.156

time sha512sum /media/user/vms/very-large-test-file.qcow2
e9608147885148b2da3443ccb1d6b618b74cbe23c296f1289399d78bc77d9a6ad06533ad976364e69aba89856619cafc35924e839773360d7ac64ab21a459813 /media/user/vms/very-large-test-file.qcow2

real 2m33.448s
echo "scale=5; (2*60)+33.448"|bc
153.448

# internal connected is
echo "scale=5; 153.448/(79.156/100)"|bc
+193.85517% faster


liked this article?

  • only together we can create a truly free world
  • plz support dwaves to keep it up & running!
  • (yes the info on the internet is (mostly) free but beer is still not free (still have to work on that))
  • really really hate advertisement
  • contribute: whenever a solution was found, blog about it for others to find!
  • talk about, recommend & link to this blog and articles
  • thanks to all who contribute!
admin