Re: writeout stalls in current -git

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Peter Zijlstra
Date: Friday, November 2, 2007 - 3:15 am

On Fri, 2007-11-02 at 10:21 +0800, Fengguang Wu wrote:


Yeah, the background threshold is not (yet) scaled. So it can happen
that the bdi_dirty limit is below the background limit.

I'm curious though as to these stalls, though, I can't seem to think of
what goes wrong.. esp since most writeback seems to happen from pdflush.

(or I'm totally misreading it - quite a possible as I'm still recovering
from a serious cold and not all the green stuff has yet figured out its
proper place wrt brain cells 'n stuff)


I still have this patch floating around:

---
Subject: 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>
---
 mm/page-writeback.c |   19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

Index: linux-2.6/mm/page-writeback.c
===================================================================
--- linux-2.6.orig/mm/page-writeback.c	2007-09-28 10:08:33.937415368 +0200
+++ linux-2.6/mm/page-writeback.c	2007-09-28 10:54:26.018247516 +0200
@@ -355,8 +355,8 @@ get_dirty_limits(long *pbackground, long
  */
 static void balance_dirty_pages(struct address_space *mapping)
 {
-	long bdi_nr_reclaimable;
-	long bdi_nr_writeback;
+	long nr_reclaimable, bdi_nr_reclaimable;
+	long nr_writeback, bdi_nr_writeback;
 	long background_thresh;
 	long dirty_thresh;
 	long bdi_thresh;
@@ -376,11 +376,26 @@ static void balance_dirty_pages(struct a
 
 		get_dirty_limits(&background_thresh, &dirty_thresh,
 				&bdi_thresh, bdi);
+
+		nr_reclaimable = global_page_state(NR_FILE_DIRTY) +
+					global_page_state(NR_UNSTABLE_NFS);
+		nr_writeback = global_page_state(NR_WRITEBACK);
+
 		bdi_nr_reclaimable = bdi_stat(bdi, BDI_RECLAIMABLE);
 		bdi_nr_writeback = bdi_stat(bdi, BDI_WRITEBACK);
+
 		if (bdi_nr_reclaimable + bdi_nr_writeback <= bdi_thresh)
 			break;
 
+		/*
+		 * Throttle it only when the background writeback cannot
+		 * catch-up. This avoids (excessively) small writeouts
+		 * when the bdi limits are ramping up.
+		 */
+		if (nr_reclaimable + nr_writeback <
+				(background_thresh + dirty_thresh) / 2)
+			break;
+
 		if (!bdi->dirty_exceeded)
 			bdi->dirty_exceeded = 1;
 


-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: writeout stalls in current -git, Peter Zijlstra, (Fri Nov 2, 3:15 am)
Re: writeout stalls in current -git, Fengguang Wu, (Fri Nov 2, 3:33 am)
Re: writeout stalls in current -git, Torsten Kaiser, (Fri Nov 2, 12:22 pm)
Re: writeout stalls in current -git, David Chinner, (Fri Nov 2, 1:43 pm)
Re: writeout stalls in current -git, Torsten Kaiser, (Fri Nov 2, 2:02 pm)
Re: writeout stalls in current -git, Torsten Kaiser, (Sun Nov 4, 4:19 am)
Re: writeout stalls in current -git, David Chinner, (Sun Nov 4, 6:45 pm)
Re: writeout stalls in current -git, Torsten Kaiser, (Mon Nov 5, 12:01 am)
Re: writeout stalls in current -git, Torsten Kaiser, (Mon Nov 5, 11:27 am)
Re: writeout stalls in current -git, Andrew Morton, (Mon Nov 5, 4:57 pm)
Re: writeout stalls in current -git, David Chinner, (Mon Nov 5, 9:25 pm)
Re: writeout stalls in current -git, Torsten Kaiser, (Tue Nov 6, 12:10 am)
Re: writeout stalls in current -git, Fengguang Wu, (Tue Nov 6, 2:17 am)
Re: writeout stalls in current -git, Peter Zijlstra, (Tue Nov 6, 3:20 am)
Patch tags [was writeout stalls in current -git], Jonathan Corbet, (Tue Nov 6, 9:25 am)
Re: Patch tags [was writeout stalls in current -git], Balbir Singh, (Tue Nov 6, 10:03 am)
Re: writeout stalls in current -git, Peter Zijlstra, (Tue Nov 6, 12:01 pm)
Re: writeout stalls in current -git, Torsten Kaiser, (Tue Nov 6, 1:26 pm)
Re: writeout stalls in current -git, Torsten Kaiser, (Tue Nov 6, 2:53 pm)
Re: Patch tags [was writeout stalls in current -git], Adrian Bunk, (Tue Nov 6, 4:26 pm)
Re: writeout stalls in current -git, David Chinner, (Tue Nov 6, 4:31 pm)
Re: writeout stalls in current -git, David Chinner, (Tue Nov 6, 7:13 pm)
Re: writeout stalls in current -git, Torsten Kaiser, (Wed Nov 7, 12:15 am)
Re: writeout stalls in current -git, David Chinner, (Wed Nov 7, 5:38 pm)
Re: Patch tags [was writeout stalls in current -git] , Jonathan Corbet, (Fri Nov 9, 9:10 am)
Re: Patch tags [was writeout stalls in current -git], Adrian Bunk, (Fri Nov 9, 9:19 am)
Re: writeout stalls in current -git, Damien Wyart, (Tue Nov 20, 6:16 am)
Re: writeout stalls in current -git, David Chinner, (Tue Nov 20, 2:09 pm)