So what did we learn: in short
Recordsize
increase your recordsize: If you have HDD IOwait issues / Low toughtput on copying large files
decrease your recordsize: if your system nearly stalls or is slow for searches, databases, antivirus, randomly
Optimization: set recordsize to 256k will half the io required for the same work.
Compression
ZFS runs best with lz4 compression which is why it’s default.
Optimization Option: Performance/CPU io/ CPU time on a storagenode one can switch zfs lz4 to zle compression.
Note: zle works best on the blobs folder, lz4 works best on the rest…
Other Optimization Options
atime off = should halves the IO used on disk tasks.
Advanced Optimization
4kn drives should run 64k vol blocksizes at async 12, tho sadly this cannot be changed on an existing …vdev or pool…
Reasons and Ramblings Below…
if one didn’t run compression it might take up x1.33 more space on disk… from what i understand… tho not sure if even zfs without compression would adjust for that, but the compression ratio seems to indicate that it might not.
i returned to a factor of 2 on my recordsize, so 256k from 128k don’t want to fuck my system over to much trying to optimize for storj.
it runs much more stable than 1m recordsize even if 1m did seem to use less io, ofc i got the hba’s installed so now everything is running different.
but had spikes of 1.2sec delays on 1m recordsizes and now i got max of 100ms everytime i reconnect to the server… else it’s basically just a couple of ms of backlog… even the regular hdd’s are running much better… but that maybe atleast in part due to the HBA’s
however one interesting thing i noted was that my storagenode did have higher ingress when i was running 1m recordsizes… but could just be random chance… will give it a test on a later date.
might setup a test node at one point… or record some storj data imput and then simulate it to test such things as the correct record sizes…
A Storj block is 2319872 bytes max it seems
I do think 256k recordsize might make the best sense. because its a multiple of 8.85
making it less than 1.02 off and would basically half your IO requirements, if we assume the database is in cache/ram
it will decrease your IO, but say you need to access a database entry or read the 25 first bytes of a file and it will load the full recordsize of a file, read the first 25bytes of 256k and then discard the rest…making some operations immensely slow. basically your computer would be getting work does at a rate of 0.01% in that particular case while working at full tilt. thus it will limit your potential bandwidth in some situations.
using zle compression atleast on the blobs folder, i would use lz4 or gzip on logs.
and then you should set atime=off
supposely it doubles disk io and is basically just an old artifact of features no longer used… it logs latency on folders, but better ways exist to perform the same task.
anyways you might not get any space saved, by running different sizes, but you do get space saved versus running without compression, if you use a recordsize that doesn’t fit well.
and to save cpu io / cpu time then you should run zle compression