• Qu Wenruo's avatar
    btrfs: qgroup: Don't scan leaf if we're modifying reloc tree · c4140cbf
    Qu Wenruo authored
    Since reloc tree doesn't contribute to qgroup numbers, just skip them.
    
    This should catch the final cause of unnecessary data ref processing
    when running balance of metadata with qgroups on.
    
    The 4G data 16 snapshots test (*) should explain it pretty well:
    
                 | delayed subtree | refactor delayed ref | this patch
    ---------------------------------------------------------------------
    relocated    |           22653 |                22673 |         22744
    qgroup dirty |          122792 |                48360 |            70
    time         |          24.494 |               11.606 |         3.944
    
    Finally, we're at the stage where qgroup + metadata balance cost no
    obvious overhead.
    
    Test environment:
    
    Test VM:
    - vRAM		8G
    - vCPU		8
    - block dev	vitrio-blk, 'unsafe' cache mode
    - host block	850evo
    
    Test workload:
    - Copy 4G data from /usr/ to one subvolume
    - Create 16 snapshots of that subvolume, and modify 3 files in each
      snapshot
    - Enable quota, rescan
    - Time "btrfs balance start -m"
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    c4140cbf
extent-tree.c 314 KB