Message ID | 20171009073730.8939-3-mlyle@lyle.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Oct 09, 2017 at 12:37:30AM -0700, Michael Lyle wrote: > The time spent searching for things to write back "counts" for the > actual rate achieved, so don't flush the accumulated rate with each > chunk. > > This will maintain better fidelity to user-commanded rates, but it > may slightly increase the burstiness of writeback. The writeback > lock needs improvement to help mitigate this. > > Signed-off-by: Michael Lyle <mlyle@lyle.org> Reviewed-by: Kent Overstreet <kent.overstreet@gmail.com> > --- > drivers/md/bcache/writeback.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c > index 42d087b9fb56..719b104db0cc 100644 > --- a/drivers/md/bcache/writeback.c > +++ b/drivers/md/bcache/writeback.c > @@ -526,6 +526,8 @@ static int bch_writeback_thread(void *arg) > struct cached_dev *dc = arg; > bool searched_full_index; > > + bch_ratelimit_reset(&dc->writeback_rate); > + > while (!kthread_should_stop()) { > down_write(&dc->writeback_lock); > if (!atomic_read(&dc->has_dirty) || > @@ -553,7 +555,6 @@ static int bch_writeback_thread(void *arg) > > up_write(&dc->writeback_lock); > > - bch_ratelimit_reset(&dc->writeback_rate); > read_dirty(dc); > > if (searched_full_index) { > @@ -563,6 +564,8 @@ static int bch_writeback_thread(void *arg) > !kthread_should_stop() && > !test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags)) > delay = schedule_timeout_interruptible(delay); > + > + bch_ratelimit_reset(&dc->writeback_rate); > } > } > > -- > 2.11.0 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-bcache" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c index 42d087b9fb56..719b104db0cc 100644 --- a/drivers/md/bcache/writeback.c +++ b/drivers/md/bcache/writeback.c @@ -526,6 +526,8 @@ static int bch_writeback_thread(void *arg) struct cached_dev *dc = arg; bool searched_full_index; + bch_ratelimit_reset(&dc->writeback_rate); + while (!kthread_should_stop()) { down_write(&dc->writeback_lock); if (!atomic_read(&dc->has_dirty) || @@ -553,7 +555,6 @@ static int bch_writeback_thread(void *arg) up_write(&dc->writeback_lock); - bch_ratelimit_reset(&dc->writeback_rate); read_dirty(dc); if (searched_full_index) { @@ -563,6 +564,8 @@ static int bch_writeback_thread(void *arg) !kthread_should_stop() && !test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags)) delay = schedule_timeout_interruptible(delay); + + bch_ratelimit_reset(&dc->writeback_rate); } }
The time spent searching for things to write back "counts" for the actual rate achieved, so don't flush the accumulated rate with each chunk. This will maintain better fidelity to user-commanded rates, but it may slightly increase the burstiness of writeback. The writeback lock needs improvement to help mitigate this. Signed-off-by: Michael Lyle <mlyle@lyle.org> --- drivers/md/bcache/writeback.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)