• C
    Btrfs: reduce CPU contention while waiting for delayed extent operations · bb721703
    Chris Mason 提交于
    We batch up operations to the extent allocation tree, which allows
    us to deal with the recursive nature of using the extent allocation
    tree to allocate extents to the extent allocation tree.
    
    It also provides a mechanism to sort and collect extent
    operations, which makes it much more efficient to record extents
    that are close together.
    
    The delayed extent operations must all be finished before the
    running transaction commits, so we have code to make sure and run a few
    of the batched operations when closing our transaction handles.
    
    This creates a great deal of contention for the locks in the
    delayed extent operation tree, and also contention for the lock on the
    extent allocation tree itself.  All the extra contention just slows
    down the operations and doesn't get things done any faster.
    
    This commit changes things to use a wait queue instead.  As procs
    want to run the delayed operations, one of them races in and gets
    permission to hit the tree, and the others step back and wait for
    progress to be made.
    Signed-off-by: NChris Mason <chris.mason@fusionio.com>
    bb721703
extent-tree.c 219.1 KB