btrfs: calculate discard delay based on number of extents
An earlier patch keeps track of discardable_extents. These are undiscarded extents managed by the free space cache. Here, we will use this to dynamically calculate the discard delay interval. There are 3 rate to consider. The first is the target convergence rate, the rate to discard all discardable_extents over the BTRFS_DISCARD_TARGET_MSEC time frame. This is clamped by the lower limit, the iops limit or BTRFS_DISCARD_MIN_DELAY (1ms), and the upper limit, BTRFS_DISCARD_MAX_DELAY (1s). We reevaluate this delay every transaction commit. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Dennis Zhou <dennis@kernel.org> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:

committed by
David Sterba

parent
5dc7c10b87
commit
a230930084
@@ -2935,8 +2935,10 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans)
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
if (btrfs_test_opt(fs_info, DISCARD_ASYNC))
|
||||
if (btrfs_test_opt(fs_info, DISCARD_ASYNC)) {
|
||||
btrfs_discard_calc_delay(&fs_info->discard_ctl);
|
||||
btrfs_discard_schedule_work(&fs_info->discard_ctl, true);
|
||||
}
|
||||
|
||||
/*
|
||||
* Transaction is finished. We don't need the lock anymore. We
|
||||
|
Reference in New Issue
Block a user