git: hammer2 - stabilization, sequencing

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Aug 27 23:26:54 PDT 2015


commit 21a904588eeea78c4050292c4c477f008a38784f
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Aug 27 23:15:17 2015 -0700

    hammer2 - stabilization, sequencing
    
    * Change the way XOPs are dispatched.  Instead of dispatching a XOP
      to specific service threads in the xgrp we now queue the XOP to a
      per-cluster-node xopq and allow the service threads to compete for
      work.
    
    * Implement XOP dependency tracking.  Cluster nodes can complete execution
      of a XOP in any order and the frontend may complete early on-quorum while
      the XOP is still executing on other cluster nodes.  In this situation
      the inode lock may be released or cycled and another, dependent XOP may
      be issued, potentially executing out of order on the cluster nodes that
      have not yet finished (or possibly even started) the previous XOP.
    
      With the new queueing mechanism we also implement dependency tracking
      using the xop->ip1, ip2, and ip3 fields.  Dependent XOPs on (slow) cluster
      nodes will be held-back and ordering of dependent XOPS will be enforced.
    
      This fixes one of several cluster-related issues that will need to be
      addressed in order to free the frontend of slow backend cluster nodes.
    
    * The strategy XOP now uses a per-XOP lock instead of an xgrp lock
      (xgrp is no longer used in the xop structure and XOPs are now
      distributed to potentially different xgrps for each cluster node).
    
    * Normalize some structural field names.
    
    * bulkfree now takes a snapshot of vchain, using a separate (temporary)
      chain structure which isolates the entire topology scan from the
      live filesystem.
    
      This required minor adjustments to base/count handling for
      HAMMER2_BREF_TYPE_VOLUME and HAMMER2_BREF_TYPE_FREEMAP.
    
    * Debugging adjustments.

Summary of changes:
 sys/vfs/hammer2/TODO               |   4 +
 sys/vfs/hammer2/hammer2.h          |  23 ++--
 sys/vfs/hammer2/hammer2_bulkscan.c |  65 ++++++++---
 sys/vfs/hammer2/hammer2_chain.c    |  87 ++++++++++++---
 sys/vfs/hammer2/hammer2_disk.h     |   1 +
 sys/vfs/hammer2/hammer2_flush.c    |   4 +-
 sys/vfs/hammer2/hammer2_inode.c    |  37 ++++---
 sys/vfs/hammer2/hammer2_ioctl.c    |   8 +-
 sys/vfs/hammer2/hammer2_strategy.c |  27 ++---
 sys/vfs/hammer2/hammer2_thread.c   | 217 ++++++++++++++++++++++++++++++-------
 sys/vfs/hammer2/hammer2_vfsops.c   |   8 ++
 sys/vfs/hammer2/hammer2_vnops.c    |  16 ++-
 sys/vfs/hammer2/hammer2_xops.c     |  38 +++----
 13 files changed, 408 insertions(+), 127 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/21a904588eeea78c4050292c4c477f008a38784f


-- 
DragonFly BSD source repository


More information about the Commits mailing list