btrfs: zoned: optimize hint byte for zoned allocator
authorNaohiro Aota <naohiro.aota@wdc.com>
Mon, 18 Dec 2023 16:02:29 +0000 (01:02 +0900)
committerDavid Sterba <dsterba@suse.com>
Fri, 12 Jan 2024 00:59:43 +0000 (01:59 +0100)
commit02444f2ac26eae6385a65fcd66915084d15dffba
tree500d74c6e6b5df1fb7a3b726deb7fcbd3911c0b6
parentb271fee9a41ca1474d30639fd6cc912c9901d0f8
btrfs: zoned: optimize hint byte for zoned allocator

Writing sequentially to a huge file on btrfs on a SMR HDD revealed a
decline of the performance (220 MiB/s to 30 MiB/s after 500 minutes).

The performance goes down because of increased latency of the extent
allocation, which is induced by a traversing of a lot of full block groups.

So, this patch optimizes the ffe_ctl->hint_byte by choosing a block group
with sufficient size from the active block group list, which does not
contain full block groups.

After applying the patch, the performance is maintained well.

Fixes: 2eda57089ea3 ("btrfs: zoned: implement sequential extent allocation")
CC: stable@vger.kernel.org # 5.15+
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-tree.c