This patchset can be fetched from github: https://github.com/adam900710/linux/tree/falloc_speedup Which is based on v5.0-rc1 tag, with another enospc debug patch. Btrfs falloc can be slower and slower when there are more and more block groups. One cause of this problem is find_free_dev_extent(), as it always search from device offset 0, and if there are thousands existing dev extents btrfs will search leaf by leaf until it reaches a free slot. This is super slow and inefficient. This patchset will introduce a new member, btrfs_device::hint_free_dev_extent to give some hint for find_free_dev_extent(). The full cause analyse and benchmark can be found in the 2nd patch. Qu Wenruo (2): btrfs: Don't search devid for every verify_one_dev_extent() call btrfs: Introduce free dev extent hint to speed up chunk allocation fs/btrfs/volumes.c | 49 ++++++++++++++++++++++++++++----------- fs/btrfs/volumes.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 13 deletions(-) -- 2.20.1
