Commit 5fce25a9df4865bdd5e3dc4853b269dc1677a02a
Committed by
Linus Torvalds
1 parent
546040dc48
Exists in
master
and in
20 other branches
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
mm/page-writeback.c
... | ... | @@ -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) |