git: hammer2 - performance, stabilization

Matthew Dillon dillon at
Tue Nov 5 22:54:06 PST 2013

commit 3f5b8b3b1546a3803bad2d997deefa0f4e30549d
Author: Matthew Dillon <dillon at>
Date:   Tue Nov 5 22:49:44 2013 -0800

    hammer2 - performance, stabilization
    * Add hysteresis to anything calling H2's strategy functions.  Because
      the BIOs are queued to a thread and compression might be required,
      it is possible for buffer flushes to queue thousands of BIOs to the
      thread all at once.  This can result in thousands of locked BUFs which
      then stall frontend code.
      Stall strategy calls (typically the buffer flush code) after queueing
      a BIO when the number of pending file BIOs exceeds vfs.hammer2.flush_pipe,
      whos value defaults to 100.  Hysteresis is set at 3/4ths the value so
      a maximum efficiency pipeline is maintained.
    * Do not try to update blockrefs in an inode when the inode is flagged
      DIRECTDATA.  This case can occur when a hardlink is shifted up to a
      higher directory.  The original inode is converted into an OBJT_HARDLINK
      object which has no file data.  Fixes a panic.

Summary of changes:
 sys/vfs/hammer2/hammer2.h        |  8 ++++++
 sys/vfs/hammer2/hammer2_flush.c  | 34 ++++++++------------------
 sys/vfs/hammer2/hammer2_vfsops.c | 53 ++++++++++++++++++++++++++++++++++++++++
 sys/vfs/hammer2/hammer2_vnops.c  |  5 +++-
 4 files changed, 75 insertions(+), 25 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list