Argon EON SSD Speed?

TLDR
I am getting 124MB/s Read 70.8MB/s Write on SSD capabale of 500MB/s and I suspect something is wrong with EON Board since rpi4b usb 3 hub should be able to reach 4-5Gbps.


What is the average sequential read/write and random read/write speed you are getting on your SSD?
I am using fio to test it and my results are a bit disappointing…
I can’t even reach 1Gpbs from 4-5 Gbps theoretical maximum
The SSD itself is reaching 500MB/s (4Gbps) when tested directly from pc …
The problem seems to be in EON board :confused:

In case anyone want to repeat what I did and compare.

  • Stop all processes before starting the test.
  • Check with iotop and htop that nothing is running that can interfere with the results.
  • Create a script fio.sh and copy it to the the disk you want to test.
  • install fio if necessary
  • run: chmod +x fio.sh
  • run: fio.sh test_name

fio.sh:

#!/bin/bash

# Check if the name parameter is provided
if [ $# -eq 0 ]; then
  echo "Usage: $0 <name>"
  exit 1
fi

# Get the folder containing the script file
script_directory=$(dirname "$0")

# Get the current datetime in a desired format (e.g., YYYY-MM-DD-HH-MM-SS)
current_datetime=$(date +"%Y-%m-%d-%H-%M-%S")

# Create the fio configuration directly in the script
fio_config="[Disk-randwrite]
rw=randwrite
ioengine=libaio
bs=4k
size=2G
numjobs=1
runtime=30s
time_based
filename=${script_directory}/randwrite

[Disk-randread]
rw=randread
ioengine=libaio
bs=4k
size=2G
numjobs=1
runtime=30s
time_based
filename=${script_directory}/randread

[Disk-write]
rw=write
ioengine=libaio
bs=4k
size=2G
numjobs=1
runtime=30s
time_based
filename=${script_directory}/write

[Disk-read]
rw=read
ioengine=libaio
bs=4k
size=2G
numjobs=1
runtime=30s
time_based
filename=${script_directory}/read
"

# Save the fio configuration to a temporary file
echo "$fio_config" > "$script_directory/fio_config.fio"

# Run the fio test using the fio configuration and save the result to a file with the provided name and current datetime
result_file="fio_result_${1}_${current_datetime}.txt"
fio "$script_directory/fio_config.fio" > "$result_file"

# Print the content of the result file
cat "$result_file"

# Clean up the temporary fio configuration file
rm "$script_directory/fio_config.fio"

rm ${script_directory}/read ${script_directory}/write ${script_directory}/randread ${script_directory}/randwrite

My results:

Disk-randwrite: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
Disk-randread: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
Disk-write: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
Disk-read: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.12
Starting 4 processes

Disk-randwrite: (groupid=0, jobs=1): err= 0: pid=4370: Mon Jul 31 22:48:18 2023
  write: IOPS=16.7k, BW=65.1MiB/s (68.2MB/s)(1952MiB/30001msec); 0 zone resets
    slat (usec): min=20, max=102711, avg=43.68, stdev=297.65
    clat (usec): min=2, max=10249, avg= 4.06, stdev=28.14
     lat (usec): min=23, max=102726, avg=48.39, stdev=299.68
    clat percentiles (usec):
     |  1.00th=[    3],  5.00th=[    3], 10.00th=[    3], 20.00th=[    3],
     | 30.00th=[    3], 40.00th=[    3], 50.00th=[    3], 60.00th=[    3],
     | 70.00th=[    3], 80.00th=[    3], 90.00th=[    3], 95.00th=[    4],
     | 99.00th=[   27], 99.50th=[   38], 99.90th=[  474], 99.95th=[  676],
     | 99.99th=[  799]
   bw (  KiB/s): min=30328, max=125392, per=55.44%, avg=74881.88, stdev=28855.40, samples=52
   iops        : min= 7582, max=31348, avg=18720.40, stdev=7213.85, samples=52
  lat (usec)   : 4=97.50%, 10=1.09%, 20=0.14%, 50=0.90%, 100=0.15%
  lat (usec)   : 250=0.10%, 500=0.04%, 750=0.08%, 1000=0.02%
  lat (msec)   : 2=0.01%, 4=0.01%, 20=0.01%
  cpu          : usr=10.02%, sys=83.65%, ctx=2220, majf=0, minf=25
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,499608,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1
Disk-randread: (groupid=0, jobs=1): err= 0: pid=4371: Mon Jul 31 22:48:18 2023
  read: IOPS=645, BW=2584KiB/s (2646kB/s)(75.7MiB/30002msec)
    slat (usec): min=202, max=316648, avg=1534.73, stdev=7424.90
    clat (usec): min=2, max=446, avg= 4.08, stdev= 6.65
     lat (usec): min=206, max=316655, avg=1539.72, stdev=7425.41
    clat percentiles (usec):
     |  1.00th=[    3],  5.00th=[    3], 10.00th=[    3], 20.00th=[    4],
     | 30.00th=[    4], 40.00th=[    4], 50.00th=[    4], 60.00th=[    4],
     | 70.00th=[    4], 80.00th=[    5], 90.00th=[    5], 95.00th=[    6],
     | 99.00th=[   11], 99.50th=[   28], 99.90th=[   99], 99.95th=[  139],
     | 99.99th=[  269]
   bw (  KiB/s): min=  119, max=13368, per=2.08%, avg=2575.46, stdev=2720.93, samples=59
   iops        : min=   29, max= 3342, avg=643.78, stdev=680.27, samples=59
  lat (usec)   : 4=74.19%, 10=24.79%, 20=0.28%, 50=0.51%, 100=0.13%
  lat (usec)   : 250=0.09%, 500=0.01%
  cpu          : usr=0.66%, sys=7.80%, ctx=19339, majf=0, minf=21
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=19379,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1
Disk-write: (groupid=0, jobs=1): err= 0: pid=4372: Mon Jul 31 22:48:18 2023
  write: IOPS=17.3k, BW=67.5MiB/s (70.8MB/s)(2048MiB/30323msec); 0 zone resets
    slat (usec): min=18, max=94731, avg=36.27, stdev=440.09
    clat (usec): min=2, max=9499, avg= 2.92, stdev=15.93
     lat (usec): min=21, max=94739, avg=39.63, stdev=440.55
    clat percentiles (usec):
     |  1.00th=[    3],  5.00th=[    3], 10.00th=[    3], 20.00th=[    3],
     | 30.00th=[    3], 40.00th=[    3], 50.00th=[    3], 60.00th=[    3],
     | 70.00th=[    3], 80.00th=[    3], 90.00th=[    3], 95.00th=[    3],
     | 99.00th=[    4], 99.50th=[    5], 99.90th=[   57], 99.95th=[  149],
     | 99.99th=[  412]
   bw (  KiB/s): min=46608, max=144056, per=70.52%, avg=95252.61, stdev=37639.23, samples=44
   iops        : min=11652, max=36014, avg=23813.16, stdev=9409.85, samples=44
  lat (usec)   : 4=99.46%, 10=0.36%, 20=0.01%, 50=0.07%, 100=0.01%
  lat (usec)   : 250=0.06%, 500=0.02%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.01%, 4=0.01%, 10=0.01%
  cpu          : usr=9.12%, sys=52.74%, ctx=10896, majf=0, minf=23
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,524289,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1
Disk-read: (groupid=0, jobs=1): err= 0: pid=4373: Mon Jul 31 22:48:18 2023
  read: IOPS=30.4k, BW=119MiB/s (124MB/s)(3557MiB/30001msec)
    slat (usec): min=5, max=1022.2k, avg=26.36, stdev=3374.93
    clat (usec): min=2, max=3921, avg= 2.52, stdev=13.61
     lat (usec): min=8, max=1022.2k, avg=29.17, stdev=3375.00
    clat percentiles (usec):
     |  1.00th=[    3],  5.00th=[    3], 10.00th=[    3], 20.00th=[    3],
     | 30.00th=[    3], 40.00th=[    3], 50.00th=[    3], 60.00th=[    3],
     | 70.00th=[    3], 80.00th=[    3], 90.00th=[    3], 95.00th=[    3],
     | 99.00th=[    3], 99.50th=[    4], 99.90th=[   55], 99.95th=[  127],
     | 99.99th=[  416]
   bw (  KiB/s): min= 2480, max=354392, per=100.00%, avg=133029.57, stdev=85427.11, samples=53
   iops        : min=  620, max=88598, avg=33257.36, stdev=21356.79, samples=53
  lat (usec)   : 4=99.61%, 10=0.06%, 20=0.05%, 50=0.18%, 100=0.04%
  lat (usec)   : 250=0.05%, 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.01%, 4=0.01%
  cpu          : usr=11.42%, sys=48.12%, ctx=5402, majf=0, minf=22
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=910710,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=121MiB/s (127MB/s), 2584KiB/s-119MiB/s (2646kB/s-124MB/s), io=3633MiB (3810MB), run=30001-30002msec
  WRITE: bw=132MiB/s (138MB/s), 65.1MiB/s-67.5MiB/s (68.2MB/s-70.8MB/s), io=4000MiB (4194MB), run=30001-30323msec

Disk stats (read/write):
  sda: ios=26990/200047, merge=2/822, ticks=272935/909981, in_queue=1183017, util=99.49%

@argon_user I just tested using slightly different methods but see the results from one of my Argon EON setups directly below:

  • Seagate BarraCuda 120 SSD (ZA2000CM10003)
  • Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-1033-raspi aarch64)

WRITE:

dd if=/dev/zero of=./test1.img bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.50563 s, 126 MB/s

READ:

hdparm -Tt /dev/sdd1

/dev/sdd1:
 Timing cached reads:   1650 MB in  2.00 seconds = 826.14 MB/sec
 Timing buffered disk reads: 692 MB in  3.00 seconds = 230.63 MB/sec

@jamesgrace Thanks a lot for your help.
I repeated the tests using your method to have a better reference.

Setup:

  • Debian GNU/Linux 10 (buster)
  • Apacer SSD AS340X

WRITE:

dd if=/dev/zero of=./test1.img bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.82511 s, 109 MB/s

READ:

hdparm -Tt /dev/sda

/dev/sda:
 Timing cached reads:   2030 MB in  2.00 seconds = 1016.38 MB/sec
 Timing buffered disk reads: 638 MB in  3.10 seconds = 205.98 MB/sec

Comparison:

  • Seagate BarraCuda 120 SSD (ZA2000CM10003)
    • Spec: up to 90K IOPS
    • Spec: up to 560/540 MB/s sequential read/write
    • EON NAS: 230/126 Mb/s
  • Apacer SSD AS340X
    • Spec: up to 80k IOPS
    • Spec: up to 550/520MB/s Sequential Read/Write Speed
    • EON NAS: 205/109 Mb/s

Seems like for some reason we are hardly reaching ~ 50% of read speed and ~25% of write speed on SSD.
Unfortunately I don’t have any sata to usb adapter to test if it’s RPI4B hardware limitation or EON sata adapter problem.

I guess it depends… is it 3.0, 3.1 or 3.2?

Hunting around for 3.0 specs:

The theoretical transfer speed of USB 3.0 is 4.8 Gbit/s (600MBps) vs. 480 Mbit/s (60MBps) which is a 10X improvement. Sustained transfer speeds (real life) for external hard drives are about 85MBps for USB 3.0 and about 22MBps for USB 2.0, so about a 5X improvement but still a significant advancement in transfer speed.

So your theoretical performance for 3.0 is 600 MB/sec…

3.1 gen 2 will give to ~10Gbit/s or around 1200MB/Sec…
3.2 will give you ~20Gbit/s if setup right…

Oh, and I would use oflag=direct instead of dsync for dd.

USB 3.0 = 5Gbps. And the chip itself is 5Gbps USB 3.0 but from the chip to the Pi4 SoC is only 4Gbps (at least this is what I found on rpi forums).
Based on above I would expect to see something very close to 4Gbps, ex 80-90% of this hardware limit.

Yup, BUT… you are measuring in MB/sec… or Megabytes not Giga BITS… Off by a factor of 8.