Re: [RFC][PATCH 7/7] writeback: balance_dirty_pages() shall write more than dirtied pages

Wu Fengguang
2009-09-10T16:09:09Z

On Thu, Sep 10, 2009 at 11:54:29PM +0800, Peter Zijlstra wrote:
> On Thu, 2009-09-10 at 23:41 +0800, Wu Fengguang wrote:
> > > > So btrfs_file_write() explicitly calls
> > > > balance_dirty_pages_ratelimited_nr() to get throttled.
> > >
> > > Right, so what is wrong with than, and how does this patch fix that?
> > >
> > > [ the only thing you have to be careful with is that you don't
> > > excessively grow the error bound on the dirty limit ]
> >
> > Then we could form a loop:
> >
> > btrfs_file_write(): dirty 1024 pages
> > balance_dirty_pages(): write up to 12 pages (= ratelimit_pages * 1.5)
> >
> > in which the writeback rate cannot keep up with dirty rate,
> > and the dirty pages go all the way beyond dirty_thresh.
>
> Ah, ok so this is to keep the error bound on the dirty limit bounded,
> because we can break out of balance_dirty_pages() early, the /* We've
> done our duty */ break.
>
> Which unbalances the duty vs the dirty ratio.

Right!

> I figure that with the task dirty limit stuff we could maybe try to get
> rid of this break.. worth a try.

Be careful. Without that break, the time a task get throttled in a
single trip may go out of control. For example, task B get blocked
for 1000 seconds because there is a task A keep dirtying pages, in
the mean time task A's dirty thresh going down slowly, but still
larger than B's.

> > Sorry for writing such a vague changelog!
>
> np, as long as we get there :-)
>
> Change makes sense now, thanks!

May I add you ack?

Thanks,
Fengguang