Many small files are a big problem for HDD pools. My rsyncs would crawl along… it got better with a metadata-only, persistent L2ARC.
But then I got smart and made two major changes
-
the small files were mostly os backups. So I archived them into larger sparsebundle archival files. That eliminated millions of small files.
-
I implemented a sVDEV, and with the right small file size thresholds, record-sizes, etc it almost doubled the speed of large sequential writes.
Now, a sVDEV is not for everyone, it carries risks, but it’s been simply amazing how fast directory reads go when all metadata is on a SSD.