Edit: Problem solved. Updated firmware to both the HBA and the port expander and perf got right.
System is AMD Threadripper 1900X with 64GB of ECC RAM, a Supermicro 9300/3008 HBA (mpt3sas) connected to an Adaptec SAS expander using a single SAS cable (ie: max 12Gbps), and 6 WD disks (some 5TB 5700rpm greens and some 4TB 7200rpm blacks) connected to the SAS expander.
Read speed is about 70MB/s and I get the CPU clogged with IO wait.
If I disable caching (ie: "zfs set primarycache=metadata tank") I get 2.5MB/s read speed.
Scrub goes up to 800-1000 MB/s.
If I use ext4 on a single disk I get max read speed (ie: 130-180MB/s).
As a reference I'm using the benchmarks here. So, considering my 6 disks raidz1 I should get something better than
I create the zraid1 pool using ashift=9 (as some disks don't support 4096 block size) and compression=off (for benchmarking purposes), no other option is given.
I've been toying with this setup for a while: hdparm/smartctl to enable disk cache on all disks, disabled zfs sync, and so on. Without any good result.
So I tried to pass the HBA controller to a Truenas VM.
Read speed is a bit better but underachieving, still.
And I've no idea how to debug this. The HW seems fine as read speeds for both a single ext4 disk and zfs scrub are maxed. It must be something in software. Any clue?
Regards
System is AMD Threadripper 1900X with 64GB of ECC RAM, a Supermicro 9300/3008 HBA (mpt3sas) connected to an Adaptec SAS expander using a single SAS cable (ie: max 12Gbps), and 6 WD disks (some 5TB 5700rpm greens and some 4TB 7200rpm blacks) connected to the SAS expander.
Read speed is about 70MB/s and I get the CPU clogged with IO wait.
If I disable caching (ie: "zfs set primarycache=metadata tank") I get 2.5MB/s read speed.
Scrub goes up to 800-1000 MB/s.
If I use ext4 on a single disk I get max read speed (ie: 130-180MB/s).
As a reference I'm using the benchmarks here. So, considering my 6 disks raidz1 I should get something better than
Code:
5x 4TB, raidz1 (raid5), 15.0 TB, w=469MB/s , rw=79MB/s , r=598MB/s
I create the zraid1 pool using ashift=9 (as some disks don't support 4096 block size) and compression=off (for benchmarking purposes), no other option is given.
I've been toying with this setup for a while: hdparm/smartctl to enable disk cache on all disks, disabled zfs sync, and so on. Without any good result.
So I tried to pass the HBA controller to a Truenas VM.
Code:
root@truenas[/mnt/tank]# zpool status
pool: boot-pool
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
boot-pool ONLINE 0 0 0
sdb3 ONLINE 0 0 0
errors: No known data errors
pool: tank
state: ONLINE
scan: scrub repaired 0B in 00:01:30 with 0 errors on Sat Jan 27 14:31:54 2024
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
6ba7075b-b593-4c24-8707-fb9a0c9260fa ONLINE 0 0 0
437619e9-3e2e-4916-8533-faad27999189 ONLINE 0 0 0
791a5f3e-2e78-4d14-9b86-6512f5fccad9 ONLINE 0 0 0
4d54f693-9c86-4e62-bae2-43a5b6778165 ONLINE 0 0 0
a3d5a21c-0c29-4521-ac0d-d00561bfe8ff ONLINE 0 0 0
77c02b25-403e-497b-abef-81bb94c91590 ONLINE 0 0 0
errors: No known data errors
Read speed is a bit better but underachieving, still.
Code:
root@truenas[/mnt/tank]# dd if=srand | pv | dd of=/dev/null
^C.3GiB 0:01:35 [ 118MiB/s] [ <=> ]
23820368+0 records in
23820367+0 records out
23820373+0 records in
23820372+0 records out
12196027904 bytes (12 GB, 11 GiB) copied, 95.5508 s, 128 MB/s
12196030464 bytes (12 GB, 11 GiB) copied, 95.5511 s, 128 MB/s
root@truenas[/mnt/tank]#
(the file "srand" is just a 48GB file pre-filled with random bytes using openssl)
And I've no idea how to debug this. The HW seems fine as read speeds for both a single ext4 disk and zfs scrub are maxed. It must be something in software. Any clue?
Regards
Last edited: