[lkml]   [2011]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH 2/6] writeback: the kupdate expire timestamp should be a moving target
On Tue, Apr 19, 2011 at 11:00:05AM +0800, Wu Fengguang wrote:
> Dynamically compute the dirty expire timestamp at queue_io() time.
> writeback_control.older_than_this used to be determined at entrance to
> the kupdate writeback work. This _static_ timestamp may go stale if the
> kupdate work runs on and on. The flusher may then stuck with some old
> busy inodes, never considering newly expired inodes thereafter.
> This has two possible problems:
> - It is unfair for a large dirty inode to delay (for a long time) the
> writeback of small dirty inodes.
> - As time goes by, the large and busy dirty inode may contain only
> _freshly_ dirtied pages. Ignoring newly expired dirty inodes risks
> delaying the expired dirty pages to the end of LRU lists, triggering
> the evil pageout(). Nevertheless this patch merely addresses part
> of the problem.

When wb_writeback() is called with for_kupdate set, it initialises
wbc->older_than_this appropriately outside the writeback loop.
queue_io() is called once per writeback_inodes_wb() call, which is
once per loop in wb_writeback. All your change does is re-initialise
older_than_this once per loop in wb_writeback, jus tin a different
and very non-obvious place.

So why didn't you just re-initialise it inside the loop in
wb_writeback() and leave all the other code alone?


Dave Chinner

 \ /
  Last update: 2011-04-19 09:09    [W:0.122 / U:0.116 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site