Messages in this thread | | | Date | Mon, 24 Sep 2007 16:12:07 +0800 | From | Fengguang Wu <> | Subject | Re: 2.6.23-rc6-mm1 -- mkfs stuck in 'D' |
| |
On Mon, Sep 24, 2007 at 09:35:23AM +0200, Peter Zijlstra wrote: > On Mon, 24 Sep 2007 11:01:10 +0800 Fengguang Wu <wfg@mail.ustc.edu.cn> > wrote: > > > > That is an interesting idea how about this: > > > > It looks like a workaround, but it does solve the most important problem. > > And it is a good logic by itself. So I'd vote for it. > > > > The fundamental problem is that the per-bdi-writeback-completion based > > estimation is not accurate under light loads. The problem remains for > > a light-load sda when there is a heavy-load sdb. > > Well, sure, in that case sda would get to write out a lot of small > things. But in that case it would be fair wrt the other writers.
Hmm, I cannot agree it to be fair - but pretty acceptable ;-) Your patch already brings great improvements in the multi-bdi case.
> > One more workaround > > could be to grant bdi(s) a minimal bdi_thresh. > > Ah, no, that is no good. For if there were a lot of BDIs this might > happen: > nr_bdis * min_thresh > dirty_limit.
Sure it is in the extreme case. However the limit could be ensured if we really want(which I'm really not sure;-) it:
if (nr_reclaimable + nr_writeback < dirty_thresh && bdi_nr_reclaimable + bdi_nr_writeback <= bdi_min_thresh) break;
> > Or better to adjust the estimation logic? > > Not sure what we can do here. The current thing is simple, fast and fair.
Agreed.
> > > + /* > > > + * break out early when: > > > + * - we're below the bdi limit > > > + * - we're below half the total limit > > > + * > > > + * we let the numbers exceed the strict bdi limit if the total > > > + * numbers are too low, this avoids (excessive) small writeouts. > > > + */ > > > + if (bdi_nr_reclaimable + bdi_nr_writeback <= bdi_thresh || > > > + nr_reclaimable + nr_writeback < dirty_thresh / 2) > > > break; > > > > This may be slightly better: > > > > if (bdi_nr_reclaimable + bdi_nr_writeback <= bdi_thresh) > > break; > > /* > > * Throttle it only when the background writeback cannot catchup. > > */ > > if (nr_reclaimable + nr_writeback < > > (background_thresh + dirty_thresh) / 2) > > break; > > Ah, indeed. Good idea.
Thank you :-)
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |