What kind of IO is this? A few large files or a lot of small files?
Are those synchronous writes?
For synchronous writes you can
- disable sync on a dataset, if you have a reliable UPS
- add slog (small Optane would work the best)
This will help offload some IO from your array. But I don’t think this is a bottleneck, I think your pool configuration is:
8x 4TB drives in RAIDZ3
Why was this configuration chosen?
It looks two raidz1 of 4 disks each would be appropriate here . And then add another vdev to add more space when needed (followed by zfs send/receive). Raid2 would have been an overkill. Raidz3 it only appropriate when you have to maintain uptime at all costs, including loss of performance.
This is not the case for a low use backup server.
Note, if one of disks develops bad sectors and you decide to replace it, that disks still provides redundancy for the duration of replacement, if secondary failure is what concerns you.
Here is some math to underscore what astronomical probabilities are we talking about
Let’s say you have 5 disks, no redundancy. Let’s say probability of any one drive failure is 2% every year.
When you have no redundancy, probability of data loss equal to 1 - (1-0.02)5 = 10%. (inverse of probability of none of the drives failing during that time)
When you add one drive for redundancy, for data loss to occur you must experience second drive failure within 1 week of first failure, during rebuild. Omitting calculations here, the result is 0.016%. Vanishingly small. I’d say, completely negligible, a far cry from no-redundancy case.
So, adding one parity driver gives you a great improvement. Totally worth it. This is raidz1.
Now adding yet another disk, probability of two disks failing within a week of a first disk failure comes out to be (I won’t bore you with derivation, it’s pretty straightforward): 0.000012%.
Horrible deal. You pay yet another cost of drive, pay in loss of performance, to make vanishingly small probability … also vanishingly small. Now we are going into territory of power supply failure frying all disks at once, house fire, etc.
Bad deal. Not worth it. This is raidz2.
You might object hat this math works for uncorrelated failures. True. But if the failures are correlated, who is to say that they won’t result in entire array dying?
Now, adding one more level of redundancy will add a bunch more zeroes after the decimal. I did not bother computing.
Another note — we consider complete drive failure. Just couple of bad blocks where disk is still usable during routine replacement sniffs the whole picture
On the other hand, 4TB is too small a size but it uses just the same energy as 20TB disk. Depending on where you live reducing number of drives can save a lot of money.
On yet another hand,
What’s the hurry then in going super fast just to sit idle for a week…
Anecdotally, I disabled my 10Gb nic to save some power and installed 2.5Gbps one instead.
I understand there is this urge to saturate everying all the time — but rationally, you don’t have to.
Post the graph of disk IO during transfer.