Commit 141df8bb authored by Coly Li's avatar Coly Li Committed by Jens Axboe

bcache: don't set max writeback rate if gc is running

When gc is running, user space I/O processes may wait inside
bcache code, so no new I/O coming. Indeed this is not a real idle
time, maximum writeback rate should not be set in such situation.
Otherwise a faster writeback thread may compete locks with gc thread
and makes garbage collection slower, which results a longer I/O
freeze period.

This patch checks c->gc_mark_valid in set_at_max_writeback_rate(). If
c->gc_mark_valid is 0 (gc running), set_at_max_writeback_rate() returns
false, then update_writeback_rate() will not set writeback rate to
maximum value even c->idle_counter reaches an idle threshold.

Now writeback thread won't interfere gc thread performance.
Signed-off-by: default avatarColy Li <colyli@suse.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent a5b47a40
...@@ -122,6 +122,9 @@ static void __update_writeback_rate(struct cached_dev *dc) ...@@ -122,6 +122,9 @@ static void __update_writeback_rate(struct cached_dev *dc)
static bool set_at_max_writeback_rate(struct cache_set *c, static bool set_at_max_writeback_rate(struct cache_set *c,
struct cached_dev *dc) struct cached_dev *dc)
{ {
/* Don't set max writeback rate if gc is running */
if (!c->gc_mark_valid)
return false;
/* /*
* Idle_counter is increased everytime when update_writeback_rate() is * Idle_counter is increased everytime when update_writeback_rate() is
* called. If all backing devices attached to the same cache set have * called. If all backing devices attached to the same cache set have
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment