Commit 5fce25a9df4865bdd5e3dc4853b269dc1677a02a

Authored by Peter Zijlstra
Committed by Linus Torvalds
1 parent 546040dc48

mm: speed up writeback ramp-up on clean systems

We allow violation of bdi limits if there is a lot of room on the system.
Once we hit half the total limit we start enforcing bdi limits and bdi
ramp-up should happen.  Doing it this way avoids many small writeouts on an
otherwise idle system and should also speed up the ramp-up.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Reviewed-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 17 additions and 2 deletions Side-by-side Diff

... ... @@ -355,8 +355,8 @@
355 355 */
356 356 static void balance_dirty_pages(struct address_space *mapping)
357 357 {
358   - long bdi_nr_reclaimable;
359   - long bdi_nr_writeback;
  358 + long nr_reclaimable, bdi_nr_reclaimable;
  359 + long nr_writeback, bdi_nr_writeback;
360 360 long background_thresh;
361 361 long dirty_thresh;
362 362 long bdi_thresh;
363 363  
364 364  
... ... @@ -376,9 +376,24 @@
376 376  
377 377 get_dirty_limits(&background_thresh, &dirty_thresh,
378 378 &bdi_thresh, bdi);
  379 +
  380 + nr_reclaimable = global_page_state(NR_FILE_DIRTY) +
  381 + global_page_state(NR_UNSTABLE_NFS);
  382 + nr_writeback = global_page_state(NR_WRITEBACK);
  383 +
379 384 bdi_nr_reclaimable = bdi_stat(bdi, BDI_RECLAIMABLE);
380 385 bdi_nr_writeback = bdi_stat(bdi, BDI_WRITEBACK);
  386 +
381 387 if (bdi_nr_reclaimable + bdi_nr_writeback <= bdi_thresh)
  388 + break;
  389 +
  390 + /*
  391 + * Throttle it only when the background writeback cannot
  392 + * catch-up. This avoids (excessively) small writeouts
  393 + * when the bdi limits are ramping up.
  394 + */
  395 + if (nr_reclaimable + nr_writeback <
  396 + (background_thresh + dirty_thresh) / 2)
382 397 break;
383 398  
384 399 if (!bdi->dirty_exceeded)