Hi.
I decided to repurpose my old junk PC as dedicated RAID array serving NFS share. I used to use this PC for like 12 years as just baremetal workstation with DAS RAID6 array however due to my desperate attempts to keep this junk alive it was one hell of a hackjob (including fact that it used two mid-tower ATX cases duct taped together in order to house all 14 HDDs at once) so I don’t even really know what baremetal performance did I get from it back in the day since there were bottlenecks everywhere (there probably still are some of them now).
I know using old hardware is usually not-all-that optimal solution but I just don’t like e-waste plus this machine kind of has sentimental value for me (plus tbh it’s not THAT bad piece of machine and still somewhat usable hardware even today, especially for something simpler like NFS server)
It’s using i7-2600k, ASUS Sabertooth P67 mobo, 32gb RAM, put in 3U rackmount ATX chassis. I put IBM SAS controller in it and connected 8 HDDs to this one:
Attached SCSI controller: Broadcom / LSI SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
Plus 6 HDDs to on-board Intel SATA II controller:
00:1f.2 SATA controller: Intel Corporation 6 Series/C200 Series Chipset Family 6 port Desktop SATA AHCI Controller (rev 05)
There’s also OS SSD connected to one of the following SATA III controllers but idk which one precisely
03:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9123 PCIe SATA 6.0 Gb/s controller (rev 11)
06:00.0 SATA controller: JMicron Technology Corp. JMB362 SATA Controller (rev 10)
0a:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9172 SATA 6Gb/s Controller (rev 11)
That said it’s mostly irrelevant since HDD 14-bay RAID6 array is star of the show here. I’m using 14x Seagate NAS 2TB drives (of varying age, some of them are indeed old-school Seagate NAS drives, some are newer revisions and some are new Seagate IronWolf successors). Also there are few WD RED 2TB drives:
Device Model: ST2000VN000-1H3164
Device Model: ST2000VN000-1H3164
Device Model: ST2000VN000-1H3164
Device Model: ST2000VN000-1HJ164
Device Model: ST2000VN000-1HJ164
Device Model: ST2000VN004-2E4164
Device Model: ST2000VN004-2E4164
Device Model: ST2000VN004-2E4164
Device Model: ST2000VN004-2E4164
Device Model: WDC WD20EFRX-68EUZN0
Device Model: WDC WD20EFRX-68EUZN0
Device Model: WDC WD20EFRX-68EUZN0
Device Model: WDC WD20EFRX-68EUZN0
Device Model: WDC WD20EFRX-68EUZN0
RAID is using encryption (LUKS) and it’s software based (btrfs raid56) with lzo compression.
For networking I’m using Intel X710-DA2 2x10G network card with LACP bonding:
02:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)
02:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)
As you may have noticed P67 chipset was the last one to still feature pci-e 2.0 so both IBM SAS/SATA controller and Intel network card use pci-e 2.0 x8 connections. In order to make PC bootable I bought GT710 pci-e x1 GPU. All in all it looks like this:
Sequential i/o is definitely within expectations, however I’m not entirely sure whether random i/o performance is adequate for such setup and I’m not sure whether it’s networking or host issue. nfsiostat gives me following results:
optimistic:
read: ops/s kB/s kB/op retrans avg RTT (ms) avg exe (ms)
1.844 637.400 345.616 0 (0.0%) 5.806 5.906
pessimistic:
read: ops/s kB/s kB/op retrans avg RTT (ms) avg exe (ms)
10.183 3323.729 326.399 0 (0.0%) 9.714 9.812
mountstat:
RPC statistics:
30657 RPC requests sent, 30657 RPC replies received (0 XIDs not found)
average backlog queue length: 0
READ:
14096 ops (45%)
avg bytes sent per op: 236 avg bytes received per op: 350632
backlog wait: 0.048808 RTT: 7.869396 total execute time: 7.977795 (milliseconds)
GETATTR:
7274 ops (23%)
avg bytes sent per op: 219 avg bytes received per op: 226
backlog wait: 0.007424 RTT: 0.199615 total execute time: 0.232747 (milliseconds)
OPEN_NOATTR:
2448 ops (7%)
avg bytes sent per op: 288 avg bytes received per op: 352
backlog wait: 0.019199 RTT: 0.189951 total execute time: 0.227533 (milliseconds)
CLOSE:
2448 ops (7%)
avg bytes sent per op: 228 avg bytes received per op: 112
backlog wait: 0.018382 RTT: 0.160539 total execute time: 0.194036 (milliseconds)
DELEGRETURN:
2447 ops (7%)
avg bytes sent per op: 240 avg bytes received per op: 160
backlog wait: 3.134859 RTT: 0.567634 total execute time: 3.711483 (milliseconds)
ACCESS:
723 ops (2%)
avg bytes sent per op: 227 avg bytes received per op: 168
backlog wait: 0.008299 RTT: 0.218534 total execute time: 0.260028 (milliseconds)
...
I’m testing it using laptop with 5G Aquantia USB NIC. seq i/o saturates this NIC so there’s nothing to be concerned about but random i/o feels a little bit sluggish (stuff like thumbnails generation etc).
I did not perform any particular configuration, apart from stuff like no_subtree_check in /etc/exports:
/dmnt/raid *(rw,sync,no_subtree_check,no_root_squash)
And I’m not really sure where to start benchmarking and looking for bottlenecks.