diff options
author | Pavel Begunkov <asml.silence@gmail.com> | 2020-11-04 09:45:51 +0000 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2020-12-08 15:54:05 +0100 |
commit | e50404a8a6997f9c0d412fa21f07a0da8e3891a2 (patch) | |
tree | 2a45b09fbbd942b99d2facee1dce5384ef810900 /fs/btrfs/discard.c | |
parent | 480a8ec83b179da1c484133b0f687090e89b00c5 (diff) |
btrfs: discard: speed up async discard up to iops_limit
Instead of using iops_limit only for cutting off extremes, calculate the
discard delay directly from it, so it closely follows iops_limit and
doesn't under-discard even though quotas are not saturated.
The iops limit could be hit more often in some cases and could increase
the discard rate.
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/discard.c')
-rw-r--r-- | fs/btrfs/discard.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/btrfs/discard.c b/fs/btrfs/discard.c index 5a88b584276f..91afa43520dc 100644 --- a/fs/btrfs/discard.c +++ b/fs/btrfs/discard.c @@ -519,7 +519,6 @@ void btrfs_discard_calc_delay(struct btrfs_discard_ctl *discard_ctl) s64 discardable_bytes; u32 iops_limit; unsigned long delay; - unsigned long lower_limit = BTRFS_DISCARD_MIN_DELAY_MSEC; discardable_extents = atomic_read(&discard_ctl->discardable_extents); if (!discardable_extents) @@ -550,11 +549,12 @@ void btrfs_discard_calc_delay(struct btrfs_discard_ctl *discard_ctl) iops_limit = READ_ONCE(discard_ctl->iops_limit); if (iops_limit) - lower_limit = max_t(unsigned long, lower_limit, - MSEC_PER_SEC / iops_limit); + delay = MSEC_PER_SEC / iops_limit; + else + delay = BTRFS_DISCARD_TARGET_MSEC / discardable_extents; - delay = BTRFS_DISCARD_TARGET_MSEC / discardable_extents; - delay = clamp(delay, lower_limit, BTRFS_DISCARD_MAX_DELAY_MSEC); + delay = clamp(delay, BTRFS_DISCARD_MIN_DELAY_MSEC, + BTRFS_DISCARD_MAX_DELAY_MSEC); discard_ctl->delay = msecs_to_jiffies(delay); spin_unlock(&discard_ctl->lock); |