• Qu Wenruo's avatar
    btrfs: remove reada infrastructure · f26c9238
    Qu Wenruo authored
    Currently there is only one user for btrfs metadata readahead, and
    that's scrub.
    
    But even for the single user, it's not providing the correct
    functionality it needs, as scrub needs reada for commit root, which
    current readahead can't provide. (Although it's pretty easy to add such
    feature).
    
    Despite this, there are some extra problems related to metadata
    readahead:
    
    - Duplicated feature with btrfs_path::reada
    
    - Partly duplicated feature of btrfs_fs_info::buffer_radix
      Btrfs already caches its metadata in buffer_radix, while readahead
      tries to read the tree block no matter if it's already cached.
    
    - Poor layer separation
      Metadata readahead works kinda at device level.
      This is definitely not the correct layer it should be, since metadata
      is at btrfs logical address space, it should not bother device at all.
    
      This brings extra chance for bugs to sneak in, while brings
      unnecessary complexity.
    
    - Dead code
      In the very beginning of scrub.c we have #undef DEBUG, rendering all
      the debug related code useless and unable to test.
    
    Thus here I purpose to remove the metadata readahead mechanism
    completely.
    
    [BENCHMARK]
    There is a full benchmark for the scrub performance difference using the
    old btrfs_reada_add() and btrfs_path::reada.
    
    For the worst case (no dirty metadata, slow HDD), there could be a 5%
    performance drop for scrub.
    For other cases (even SATA SSD), there is no distinguishable performance
    difference.
    
    The number is reported scrub speed, in MiB/s.
    The resolution is limited by the reported duration, which only has a
    resolution of 1 second.
    
    	Old		New		Diff
    SSD	455.3		466.332		+2.42%
    HDD	103.927 	98.012		-5.69%
    
    Comprehensive test methodology is in the cover letter of the patch.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    f26c9238
ctree.h 130 KB