On Wed, 2011-09-28 at 22:02 +0800, Wu Fengguang wrote: /me attempts to swap back neurons related to writeback > After lots of experiments, I end up with this bdi reserve point > > + x_intercept = bdi_thresh / 2 + MIN_WRITEBACK_PAGES; > > together with this chunk to avoid a bdi stuck in bdi_thresh=0 state: > > @@ -590,6 +590,7 @@ static unsigned long bdi_position_ratio( > */ > if (unlikely(bdi_thresh > thresh)) > bdi_thresh = thresh; > + bdi_thresh = max(bdi_thresh, (limit - dirty) / 8); > /* > * scale global setpoint to bdi's: > * bdi_setpoint = setpoint * bdi_thresh / thresh So you cap bdi_thresh at a minimum of (limit-dirty)/8 which can be pretty close to 0 if we have a spike in dirty or a negative spike in writeout bandwidth (sudden seeks or whatnot). > The above changes are good enough to keep reasonable amount of bdi > dirty pages, so the bdi underrun flag ("[PATCH 11/18] block: add bdi > flag to indicate risk of io queue underrun") is dropped. That sounds like goodness ;-) > I also tried various bdi freerun patches, however the results are not > satisfactory. Basically the bdi reserve area approach (this patch) > yields noticeably more smooth/resilient behavior than the > freerun/underrun approaches. I noticed that the bdi underrun flag > could lead to sudden surge of dirty pages (especially if not > safeguarded by the dirty_exceeded condition) in the very small > window.. OK, so let me try and parse this magic: + x_intercept = bdi_thresh / 2 + MIN_WRITEBACK_PAGES; + if (bdi_dirty < x_intercept) { + if (bdi_dirty > x_intercept / 8) { + pos_ratio *= x_intercept; + do_div(pos_ratio, bdi_dirty); + } else + pos_ratio *= 8; + } So we set our target some place north of MIN_WRITEBACK_PAGES: if we're short we add a factor of: x_intercept/bdi_dirty. Now, since bdi_dirty < x_intercept, this is > 1 and thus we promote more dirties. Additionally we don't let the factor get larger than 8 to avoid silly large fluctuations (8 already seems quite generous to me). Now I guess the only problem is when nr_bdi * MIN_WRITEBACK_PAGES ~ limit, at which point things go pear shaped. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href