1) Try making two 4-device RAIDZ1 vdevs. My guess is you may see a significant bump in I/O speed.
I modified some options while trying this.
Compression=disable, atime=off.
And the same result was achieved in SMB.
But I found one interesting part, when I put the SMB down for a while and did the test with fio, I see a pretty good looking result.
This one is write.
Code:
root@truenas[/mnt/NVMe-DATA-Pool-01/TEST]# fio --filename=./test --direct=1 --rw=write --bs=1M --iodepth=2 --numjobs=12 --group_reporting --name=test --size=50G
test: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=2
...
fio-3.19
Starting 12 processes
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
test: Laying out IO file (1 file / 51200MiB)
Jobs: 12 (f=12): [W(12)][100.0%][w=7668MiB/s][w=7667 IOPS][eta 00m:00s]
test: (groupid=0, jobs=12): err= 0: pid=6814: Thu Jun 8 06:27:09 2023
write: IOPS=6991, BW=6992MiB/s (7331MB/s)(600GiB/87877msec)
clat (usec): min=260, max=10806, avg=1683.61, stdev=479.59
lat (usec): min=278, max=10824, avg=1711.13, stdev=482.52
clat percentiles (usec):
| 1.00th=[ 873], 5.00th=[ 1045], 10.00th=[ 1139], 20.00th=[ 1287],
| 30.00th=[ 1401], 40.00th=[ 1516], 50.00th=[ 1614], 60.00th=[ 1729],
| 70.00th=[ 1860], 80.00th=[ 2024], 90.00th=[ 2343], 95.00th=[ 2606],
| 99.00th=[ 3097], 99.50th=[ 3261], 99.90th=[ 3589], 99.95th=[ 3687],
| 99.99th=[ 4293]
bw ( MiB/s): min= 4772, max= 9518, per=100.00%, avg=6995.16, stdev=53.66, samples=2076
iops : min= 4770, max= 9515, avg=6988.21, stdev=53.76, samples=2076
lat (usec) : 500=0.08%, 750=0.22%, 1000=3.01%
lat (msec) : 2=75.26%, 4=21.41%, 10=0.01%, 20=0.01%
cpu : usr=1.86%, sys=19.73%, ctx=706575, majf=0, minf=0
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,614400,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=2
Run status group 0 (all jobs):
WRITE: bw=6992MiB/s (7331MB/s), 6992MiB/s-6992MiB/s (7331MB/s-7331MB/s), io=600GiB (644GB), run=87877-87877msec
and this one is read
Code:
root@truenas[/mnt/NVMe-DATA-Pool-01/TEST]# fio --filename=./test --direct=1 --rw=read --bs=1M --iodepth=2 --numjobs=12 --group_reporting --name=test --size=50G
test: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=2
...
fio-3.19
Starting 12 processes
Jobs: 1 (f=1): [_(6),R(1),_(5)][100.0%][r=1063MiB/s][r=1063 IOPS][eta 00m:00s]
test: (groupid=0, jobs=12): err= 0: pid=6841: Thu Jun 8 06:28:13 2023
read: IOPS=12.1k, BW=11.8GiB/s (12.7GB/s)(600GiB/50784msec)
clat (usec): min=112, max=24685, avg=848.31, stdev=182.63
lat (usec): min=113, max=24685, avg=848.54, stdev=182.63
clat percentiles (usec):
| 1.00th=[ 553], 5.00th=[ 619], 10.00th=[ 644], 20.00th=[ 693],
| 30.00th=[ 734], 40.00th=[ 791], 50.00th=[ 848], 60.00th=[ 889],
| 70.00th=[ 930], 80.00th=[ 979], 90.00th=[ 1057], 95.00th=[ 1156],
| 99.00th=[ 1319], 99.50th=[ 1385], 99.90th=[ 1565], 99.95th=[ 1647],
| 99.99th=[ 2442]
bw ( MiB/s): min=11362, max=17775, per=100.00%, avg=14187.36, stdev=166.14, samples=1026
iops : min=11361, max=17772, avg=14181.80, stdev=166.24, samples=1026
lat (usec) : 250=0.01%, 500=0.20%, 750=33.05%, 1000=50.29%
lat (msec) : 2=16.44%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.01%
cpu : usr=0.42%, sys=43.65%, ctx=1611829, majf=0, minf=3072
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=614400,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=2
Run status group 0 (all jobs):
READ: bw=11.8GiB/s (12.7GB/s), 11.8GiB/s-11.8GiB/s (12.7GB/s-12.7GB/s), io=600GiB (644GB), run=50784-50784msec
And I found one strange situation on my 40G switch.
Discard packets occur when transferring files.
Currently, I use the vlan interface on Truenas devices(I mean create 'vlan' interface in Truenas and use it.), and I use multiple vlan and NW IDs with Trunk settings on the switch.
I changed it to access mode for testing, and I got a reading speed of about 400MB/s to 600MB/s on SMB.
ZFS itself needs some tuning, but there seems to be a problem with Truenas's NW.
This is because traditional HDD-based Truenas Scale systems use the same configuration, but these symptoms are not occurring.