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: Coly Li <colyli@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
a5b47a40be
commit
141df8bb5d
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue