M.2 nvme expansion bd

Added m.2 expansion bd (NVME) to my Argon one v2 case. Tried 3 different nvme ssd. All 3 had slower read/write speeds as compared to the original data expansion bd with Sata ssd. Purchased a m.2 nvme usb 3.0 adapter and inserted my nvme ssd and plugged into the argon one USB 3.0 port (unplugged jumper connecting the expansion bd) now read/write speeds were better than the original sata expansion bd. Booting from Ubuntu mate on the ssd (both sata and nvme ) although I also tried the same tests using pi os.
Any ideas ?

I’m seeing the same sluggish performance. It looks like the ASMedia chipset in the nVME base doesn’t support UAS, even though the website says it does (?):


└─$ lsusb -t             
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M

For UAS we should see Driver=uas for the Mass Storage device. What do you get?

I get the same as you indicating the Argon NVME expansion bd does not support UAS. Very disappointing./: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
|__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M

Yeah, frustrating as their website explicitly lists UAS (aka UASP) as a feature on the product page for the more expensive nvme base :confused:

It appears that the expansion board isn’t advertising the UASP capability, I’ve recently performed an investigation into the poor performance of this board and you may be interested in reading more: https://www.martinrowan.co.uk/2023/01/argon-one-nvme-board-slower-than-sata/

@tas100x @oliverlavery Can you get the output from lsusb -tv so that I can see a bit more information?

As a new user, I cannot post with more than 2 links in the response… So here is my actual response.

TLDR
@martinrowan I think I got it working
I ran into a different issue with S.M.A.R.T. information - any help is much appreciated!

1 Like

Thats good to know. I’ve another NVMe board on order from another supplier to see if it also has the same problem. I suspect they’ve flashed the firmware for the M.2 SATA SSD board on to some NVMe boards, which seems to make it work, but only bulk usb-storage mode.

With 2 boards I’ll also try and update the firmware to confirm (I didn’t want to try it and risk bricking the only board I’ve got to experiment with at the minute). Then we just need Argon40 to fix their production and testing process and release an official firmware update to fix the problem.

I assume you picked the new pid when you flashed it? Another user on twitter where uas was working their board had a non ASMedia vid (which is interesting) showing as 199d:2362

Hi, I’ve got the NVME extension board as well. It uses uas, but has a different ID!

$ sudo lsusb -tv
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    ID 1d6b:0003 Linux Foundation 3.0 root hub
    |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
        ID 199d:2362

Apparently it is a AS2360 chip; it also advertises “bInterfaceProtocol 98”

$ sudo lsusb -v -d 199d:2362
Bus 002 Device 002: ID 199d:2362 Gen2 10GBbps AS2360
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.20
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         9
  idVendor           0x199d
  idProduct          0x2362
  bcdDevice            1.00
  iManufacturer           2 Gen2 10GBbps
  iProduct                3 AS2360
  iSerial                 1 000000000F02
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0079
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst              15
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst              15
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       1
      bNumEndpoints           4
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     98
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst              15
        MaxStreams             32
        Data-in pipe (0x03)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst              15
        MaxStreams             32
        Data-out pipe (0x04)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst              15
        MaxStreams             32
        Status pipe (0x02)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst               0
        Command pipe (0x01)
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x002a
  bNumDeviceCaps          3
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x0000f41e
      BESL Link Power Management (LPM) Supported
    BESL value     1024 us
    Deep BESL value    61440 us
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat          10 micro seconds
    bU2DevExitLat        2047 micro seconds
  SuperSpeedPlus USB Device Capability:
    bLength                20
    bDescriptorType        16
    bDevCapabilityType     10
    bmAttributes         0x00000001
      Sublink Speed Attribute count 1
      Sublink Speed ID count 0
    wFunctionalitySupport   0x1100
    bmSublinkSpeedAttr[0]   0x000a4030
      Speed Attribute ID: 0 10Gb/s Symmetric RX SuperSpeedPlus
    bmSublinkSpeedAttr[1]   0x000a40b0
      Speed Attribute ID: 0 10Gb/s Symmetric TX SuperSpeedPlus
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x000d
  Self Powered
  U1 Enabled
  U2 Enabled

The performance values are pretty close to the ones posted by kulho:

Running iozone 1024K random read and write tests...
write  rewrite   random read    random write 
304472 346971	 322792   	360290

Running iozone 4K random read and write tests...
write  rewrite   random read    random write 
24707    30426   24946       	30311

What bothers me much more, I cannot get the SMART readings too:

$ sudo smartctl -a /dev/sda -d scsi
smartctl 7.2 2020-12-30 r5155 [aarch64-linux-5.15.84-v8+] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               Argon
Product:              Forty
Revision:             0
Compliance:           SPC-4
User Capacity:        256,060,514,304 bytes [256 GB]
Logical block size:   512 bytes
LU is fully provisioned
Rotation Rate:        Solid State Device
Logical Unit id:      0x5000000000000001
Serial number:        20F000000000
Device type:          disk
Local Time is:        Thu Jan 12 17:26:10 2023 GMT
SMART support is:     Available - device has SMART capability.
SMART support is:     Enabled
Temperature Warning:  Disabled or Not Supported

=== START OF READ SMART DATA SECTION ===
SMART Health Status: OK
Current Drive Temperature:     0 C
Drive Trip Temperature:        0 C

Error Counter logging not supported
Device does not support Self Test logging

I tried to plug the board to a windows PC, it was not recognized at all. I only have a USB2 cable at hand, could it be the reason?

Thanks I overwrote the firmware that was shipped with my NVMe board with AS_PCIE_210527_81_3A_00.bin which has “fixed” the incorrect driver issue. It appears there is an unknown number of boards (I’ve got 2 now, from different suppliers) which have been flashed with the wrong firmware, which causes the boards to underperform. I’m in discussion with Argon40 about this.

If SMART information works on Windows but not Linux, then I suspect the SMART issue is down to smartmon tools, and you need to raise a bug there: GitHub - smartmontools/smartmontools: Official read only mirror of the smartmontools project SVN there is already one relating to a different ASMedia chip. Of course, it could be a Linux Kernel driver issue too, but if it works on Windows I think it rules out the hardware and firmware.

So today I was busy and I got the SMART information out of the device.
The first thing I messed up last time was the idproduct which was 2364 instead of 2362, which I corrected. The problem is that nvme support for ASM2362 was only added in smarmontools 7.3 and higher… Debian bullseye is still stuck on 7.2 which does not support it. So either you go bookworm or you can do some trickery - I manage to stay on bullseye. The steps I took to achieve it were the following:
I have openmediavault installed on a raspbian os.

prepare some dependencies

sudo apt-get install autoconf automake debhelper-compat libcap-ng-dev libselinux1-dev libsystemd-dev devscripts -y

remove the old smartmontools

sudo dpkg -r --force-depends smartmontools

get the newer version

dget https://deb.debian.org/debian/pool/main/s/smartmontools/smartmontools_7.3-1.dsc

create directory and exctract package into it

dpkg-source -x smartmontools_7.3-1.dsc

go to new directory

cd smartmontools-7.3/

build it

sudo dpkg-buildpackage -rfakeroot -b

go back

cd ..

add the built packages

sudo dpkg -i smartmontools_7.3-1_armhf.deb
sudo dpkg -i smartmontools-dbgsym_7.3-1_armhf.deb 

verify everything’s ok

sudo apt-get update && sudo apt-get upgrade
sudo smartctl -V

there should be nothing broken and you should see version 7.3
then to get the smart info do

sudo smartctl -a /dev/sda

for good measure devscripts can be removed, as it’s not needed

sudo apt-get remove devscripts

et voila

So to sum up if we want smart the official way I guess we need to wait until bookworm gets released… :frowning:
Anyway, now I am trying to get the openmediavault to work… I noticed that it is identifying my disk as sat and sudo smartctl -a /dev/sda -d sat will throw an error. There is a new type for asmedia - sudo smartctl -a /dev/sda -d sntasmedia which works for me. However, I cannot seem to yet figure out how to modify the openmedivault to use proper commands.

1 Like

So I guess my question now is do I wait for Argon40 to come up with a solution or is me updating the firmware the way to go. I am not sure how to do that so would need some instructions. Thanks for pursuing this matter.

I’d hold out for now. It’s the Chinese New Year holiday so unfortunately there is going to be a bit of a delay.

The good news is using the drive with the wrong firmware still works and is still a lot faster than a micro sd card and updating the firmware doesn’t impact what’s stored on your disk. So once we know how they plan to handle resolving this issue (new firmware or replacement boards (if they aren’t allowed to release the firmware and flashing tools)) then it should be straightforward to get a boost in performance when we have a solution.

If you checkout my updated blog post you’ll see the performance gain we hopefully will get to see.

For the openmediavault smart information I have created a github issue. Feel free to follow along or join the conversation. I’ll report back if there’s any breakthrough. The command line smart info is working fine for now.

So status and temperature readings are working in OMV now.


Hopefully, the fix is implemented in the next release. If you don’t want to wait you can follow these steps to get the prebuilt version with the fix. For the fix to work it is important that your chip is showing id 174c:2362 as the fix was hardcoded for these values - see implementation. This means that anyone with a current software implementation in the nvme expansion board from argon40 will need to update the firmware version and specify the correct ASM2362 chip in the flashing tool (see my first comment or head to the @martinrowan 's blog.

Anyway, it would still be preferable if argon40 released an official software release or point to one.

@martinrowan If you are already in touch with argon40, it would make sense to suggest that the new firmware shall have the correct ID of 174c:2362 and not the old one 174c:55aa. If they put something else then the current fix in OMV would not be working.

to find out your current id use command lsusb -tv
E.g.

$ lsusb -tv
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    ID 1d6b:0003 Linux Foundation 3.0 root hub
    |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
        ID 174c:2362 ASMedia Technology Inc. 

cheers!

@kulho It appears that the boards that shipped what Argon40 believe is the correct firmware aren’t using the correct vid, 174c is registered to ASMedia, however, according to this twitter user the “working” board he has came with vid: 199d pid: 2362. 199d I don’t believe they should be using, however, if Argon40 go back to using that rather than a further change would be required in openmediavault to handle the configuration they’ve gone with.

That seems a bit awkward. Well then I hope they will be reasonable and use the correct IDs, because it is already problematic to keep track of which chips are not buggy and what are their capabilities.