hammer2 - freemap part 3 - group by allocation size
authorMatthew Dillon <dillon@apollo.backplane.com>
Tue, 4 Jun 2013 21:29:20 +0000 (14:29 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 4 Jun 2013 21:29:20 +0000 (14:29 -0700)
commita98aa0b0cae958124b59082290f0dfabc8423768
tree9786743175ea986e8e310122eb9c5249916cbec2
parent0429c13067a052510caa0f0ffb1520c9693140cd
hammer2 - freemap part 3 - group by allocation size

* Each freemap leaf represents ~2MB worth of storage.  Assign a radix to
  each leaf, limiting allocations from that leaf to that radix.

  This primarily results in inodes being grouped together, improving
  the performance for find, ls or other topological scans.  We could
  improve this but for now we'll stick with it as-is.

  This mechanic also allows us to use cluster_read().  This function is
  used for everything except volume-header and freemap elements.

* More formally handle logical sizes vs allocation sizes vs device I/O
  sizes.  For example, a 1KB inode allocates 1KB using 16KB device I/O's.

* Beef up the sysctl I/O counters.
sys/vfs/hammer2/DESIGN
sys/vfs/hammer2/hammer2.h
sys/vfs/hammer2/hammer2_chain.c
sys/vfs/hammer2/hammer2_disk.h
sys/vfs/hammer2/hammer2_flush.c
sys/vfs/hammer2/hammer2_freemap.c
sys/vfs/hammer2/hammer2_vfsops.c