Re: [PATCH 10/18] writeback: dirty position control - bdi reserve area
From: Peter Zijlstra <hidden>
Date: 2011-09-28 14:50:35
Also in:
linux-fsdevel, lkml
On Wed, 2011-09-28 at 22:02 +0800, Wu Fengguang wrote: /me attempts to swap back neurons related to writeback
quoted hunk ↗ jump to hunk
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@kvack.org. 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=mailto:"dont@kvack.org"> email@kvack.org </a>