L2Arc is usually configured to cache random spinning platter reads on an SSD. I've set up this configuration in the hopes of speeding up directory traversal.

This is the setup:

# zpool list -v NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT geek1 2.72T 1.18T 1.54T - 53% 43% 4.64x ONLINE - sdc 1.36T 606G 786G - 54% 43% sdd 1.36T 606G 786G - 53% 43% log - - - - - - zil 3.97G 0 3.97G - 0% 0% cache - - - - - - l2arc 32.0G 4.24G 27.8G - 0% 13%

The machine has 20GB of memory: plenty for Arc.

I would expect a find call over the filesystem to be sped up a lot. It is sped up by a factor of 5, but in absolute terms it's still slow. It takes 3.4 hours to list 46M files.

# while true; do time find /geek1/ -type f|wc -l; done 46774149 real 1103m18.661s user 2m15.143s sys 5m52.096s 46774149 real 243m0.289s user 2m3.063s sys 5m7.107s 46774149 real 205m23.922s user 2m7.566s sys 6m32.638s

How can directory traversal be made more efficient?

zpool get all prints: