You have a point, but I’m not that kind of guy. I’m always overthinking.
For example I know SMR drives are really not good for any consistent load. On the other hand I already have them, and I have a tiered storage that mostly nullifies negative impact. To do that I’m trying to limit write multiplication as much as I can, so I’m using 4M recordsize globally for all non-database workloads, that helps prevent defragmentation and speeds up contiguous RW considerably. I think 4M is also an old default for piece storage used in config previously. The bad side of the coin is that you need to directly highlight where databases are and split them from anything else. And here comes storj, that packs differently used files in adjacent directories, requiring a bushy tree to separate databases and bulk load files:
storage:
- root:
- sqlite database files live here
- blobs:
- data files stored here
- hashstore:
- meta:
- more database files
- ID:
- s0:
- 01 - FF data files are here
- meta hashtbl (?database) is here
This means it’s not trivial to clearly separate database/data, as some folders are even automatically created. This is why I’m trying to collect as much data as I can, to understand how can I improve IO for storj.
And I’m already past “don’t touch it” phase. Everything works properly without issues, until I lost power and hashtbl’s fail to load, so I need to recreate them from scratch, and when I do that — I need a day or two of high IO load to get node back online.
With hashstore, I wouldn’t bother tuning different ZFS record sizes anymore. ZFS had its place with piecestore, but it’s no longer the sweet spot for hashstore.
Just use XFS with the defaults and move on. Trust the guys who have been running Storj nodes at scale for years