HAMMER 61E/Many: Stabilization, Performance
authorMatthew Dillon <dillon@dragonflybsd.org>
Sat, 12 Jul 2008 23:04:50 +0000 (23:04 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sat, 12 Jul 2008 23:04:50 +0000 (23:04 +0000)
commit7a61b85d41550a4dd486ece86017f8be11109547
tree2921178c70d44bf367df7e61a33fcb43e5770ea4
parent5b01dbc668d4079936abf0097c555f5ca69b7bd7
HAMMER 61E/Many: Stabilization, Performance

* The UNDO FIFO could get over-full, causing an assertion.  This was because
  certain load tests could cuase directories to end up with tens of
  thousands of directory entries and all of them were being flushed in
  a single flush group.

  Rewrite the flush group infrastructure to fix the issue.  Instead of
  having a two-stage flush we now have flush compartmentalization with
  the new hammer_flush_group structure.  Flushes can thus be broken down
  into transactions that don't blow out the UNDO FIFO.

* Improve flush performance by quite a bit.  The new infrastructure
  generates fewer B-Tree conflicts and appears to flush the work more
  smoothly, probably owing to the fact that the upper size of each
  flush group is now bounded.
12 files changed:
sys/vfs/hammer/hammer.h
sys/vfs/hammer/hammer_flusher.c
sys/vfs/hammer/hammer_inode.c
sys/vfs/hammer/hammer_ioctl.c
sys/vfs/hammer/hammer_ioctl.h
sys/vfs/hammer/hammer_mirror.c
sys/vfs/hammer/hammer_object.c
sys/vfs/hammer/hammer_ondisk.c
sys/vfs/hammer/hammer_prune.c
sys/vfs/hammer/hammer_reblock.c
sys/vfs/hammer/hammer_vfsops.c
sys/vfs/hammer/hammer_vnops.c