• Naohiro Aota's avatar
    btrfs: zoned: cache reported zone during mount · 16beac87
    Naohiro Aota authored
    When mounting a device, we are reporting the zones twice: once for
    checking the zone attributes in btrfs_get_dev_zone_info and once for
    loading block groups' zone info in
    btrfs_load_block_group_zone_info(). With a lot of block groups, that
    leads to a lot of REPORT ZONE commands and slows down the mount
    process.
    
    This patch introduces a zone info cache in struct
    btrfs_zoned_device_info. The cache is populated while in
    btrfs_get_dev_zone_info() and used for
    btrfs_load_block_group_zone_info() to reduce the number of REPORT ZONE
    commands. The zone cache is then released after loading the block
    groups, as it will not be much effective during the run time.
    
    Benchmark: Mount an HDD with 57,007 block groups
    Before patch: 171.368 seconds
    After patch: 64.064 seconds
    
    While it still takes a minute due to the slowness of loading all the
    block groups, the patch reduces the mount time by 1/3.
    
    Link: https://lore.kernel.org/linux-btrfs/CAHQ7scUiLtcTqZOMMY5kbWUBOhGRwKo6J6wYPT5WY+C=cD49nQ@mail.gmail.com/
    Fixes: 5b316468 ("btrfs: get zone information of zoned block devices")
    CC: stable@vger.kernel.org
    Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    16beac87
volumes.c 224 KB