git: kernel - Enhance buffer flush and cluster_write linearity

Matthew Dillon dillon at
Tue Jun 28 19:00:17 PDT 2016

commit d9a07a60b1de36c7de6802640a2fc229d62ab31c
Author: Matthew Dillon <dillon at>
Date:   Tue Jun 28 18:52:29 2016 -0700

    kernel - Enhance buffer flush and cluster_write linearity
    * flushbufqueues() was iterating between cpus, taking only one buffer off
      of each cpu's queue.  This forced non-linearly on-flush, messing up
      sequential performance for HAMMER1 and HAMMER2.  For HAMMER2 this also
      caused physical blocks to be allocated out of order.
      Add sysctl vfs.flushperqueue to specify the number of buffers to flush
      per cpu before iterating the pcpu queue.  Default 1024.
    * cluster_write() no longer requires that a buffer be VOP_BMAP()'d
      successfully in order to issue writes.  This effects HAMMER2, which does
      not assign physical device blocks until the logical buffer is actually
      flushed to the backend device.
    * Fixes non-linearity problems for buffer daemon flushbufqueues() calls,
      and for cluster_write() with or without write_behind.

Summary of changes:
 sys/kern/vfs_bio.c     | 27 +++++++++++++++++----------
 sys/kern/vfs_cluster.c | 19 ++++++++++++++++---
 2 files changed, 33 insertions(+), 13 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list