Re: external USB disk: 400MB/s transfer, but get only 40MB/s

From: Matthias Apitz <guru_at_unixarea.de>
Date: Thu, 29 Jan 2026 07:59:44 UTC
El día miércoles, enero 28, 2026 a las 09:50:17a. m. -0800, Jin Guojun[VFF] escribió:

> 400MB/s is bus speed, the actual speed of USB drives are different, you need
> to check your disk models and specs.
> 
> "WD Elements external hard drives generally provide reliable, standard
> performance for backups and media storage, with typical read/write speeds
> ranging between 100–130 MB/s for portable HDD models via USB 3.0."
> 
> You are doing read and write on disks so that the performance is one half of
> the disk speed (or one half of average of two drives).
> 
> Try following (assume your drive is ad0)
> 
> dd if=/dev/zero of=/mnt/file bs=8m
> for testing writing speed
> 
> dd if=/dev/ad0 of=/dev/null bs=8m
> for testing reading speed

Thanks! I did so, see below, and the read speed matches the above specs,
but the write speed is three times slower (I put dots in the output of
dd(1) for better readability).

# usbconfig -d ugen0.4 dump_all_desc
ugen0.4: <Western Digital Elements 2621> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=ON (224mA)
...

The full output of usbconfig(8) is attached also below.

	matthias


# mount_ntfs-3g /dev/da0p1 /mnt

# dd if=/dev/zero of=/mnt/file bs=8m count=1000
1000+0 records in
1000+0 records out
8388608000 bytes transferred in 183.003888 secs (45.838.414 bytes/sec)

# dd if=/dev/da0 of=/dev/null bs=8m count=1000
1000+0 records in
1000+0 records out
8388608000 bytes transferred in 67.147415 secs (124.928.234 bytes/sec)



# usbconfig -d ugen0.4 dump_all_desc
ugen0.4: <Western Digital Elements 2621> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=ON (224mA)

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0310 
  bDeviceClass = 0x0000  <Probed by interface class>
  bDeviceSubClass = 0x0000 
  bDeviceProtocol = 0x0000 
  bMaxPacketSize0 = 0x0009 
  idVendor = 0x1058 
  idProduct = 0x2621 
  bcdDevice = 0x1026 
  iManufacturer = 0x0001  <Western Digital>
  iProduct = 0x0002  <Elements 2621>
  iSerialNumber = 0x0003  <57584B314132394152334B33>
  bNumConfigurations = 0x0001 

 Configuration index 0

    bLength = 0x0009 
    bDescriptorType = 0x0002 
    wTotalLength = 0x002c 
    bNumInterfaces = 0x0001 
    bConfigurationValue = 0x0001 
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x0080 
    bMaxPower = 0x0070 

    Interface 0
      bLength = 0x0009 
      bDescriptorType = 0x0004 
      bInterfaceNumber = 0x0000 
      bAlternateSetting = 0x0000 
      bNumEndpoints = 0x0002 
      bInterfaceClass = 0x0008  <Mass storage>
      bInterfaceSubClass = 0x0006 
      bInterfaceProtocol = 0x0050 
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007 
        bDescriptorType = 0x0005 
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0400 
        bInterval = 0x0000 
        bRefresh = 0x0000 
        bSynchAddress = 0x0000 

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x30
      bDescriptorSubType = 0x0f
       RAW dump: 
       0x00 | 0x06, 0x30, 0x0f, 0x00, 0x00, 0x00


     Endpoint 1
        bLength = 0x0007 
        bDescriptorType = 0x0005 
        bEndpointAddress = 0x0002  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0400 
        bInterval = 0x0000 
        bRefresh = 0x0000 
        bSynchAddress = 0x0000 

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x30
      bDescriptorSubType = 0x0f
       RAW dump: 
       0x00 | 0x06, 0x30, 0x0f, 0x00, 0x00, 0x00






-- 
Matthias Apitz, ✉ guru@unixarea.de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub