public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Fengguang Wu <wfg@mail.ustc.edu.cn>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 05/14] readahead: thrashing recovery method: refill holes
Date: Fri, 16 Mar 2007 16:49:01 +0800	[thread overview]
Message-ID: <374035059.71212@ustc.edu.cn> (raw)
Message-ID: <20070316085052.284256000@mail.ustc.edu.cn> (raw)
In-Reply-To: 20070316084856.687942000@mail.ustc.edu.cn

[-- Attachment #1: readahead-thrashing-recovery-method-refill-holes.patch --]
[-- Type: text/plain, Size: 2107 bytes --]

When thrashing happened in the following abnormal cases:
	1) the old chunk is lost;
	2) random pages are lost due to unbalanced aging.
There will be hole(s) in the otherwise continuous readahead pages.

We recover from it by simply refilling all possible holes and
turning off lookahead.

These kind of abnormal situations are not expected to repeatable for the same
stream. They happen in a random fashion and do not tell much about the system
load. So the best thing we can do is to do nothing more than refilling the
holes.  If thrashing persists, it will quickly fail into the 3) case where we
get the exact thrashing threshold:
	3) the new chunk is thrashed.

Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
---
 mm/readahead.c |   19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

--- linux-2.6.21-rc3-mm2.orig/mm/readahead.c
+++ linux-2.6.21-rc3-mm2/mm/readahead.c
@@ -1552,20 +1552,23 @@ thrashing_recovery_readahead(struct addr
 					  RA_EVENT_READAHEAD_THRASHING,
 					  ra->readahead_index - offset);
 
-	if (offset < ra->ra_index) {
+	if (offset < ra->ra_index || unbalanced_aging) {
 		/*
-		 * Thrashed when we are in [la_index, ra_index), i.e.
-		 * the old chunk is lost soon after the new one is allocated.
-		 * Ensure that we recover all needed pages in the old chunk.
-		 * And futher keep the lookahead_index untouched.
+		 * 1) The old chunk is lost.
+		 * 2) Some random pages are lost due to unbalanced zone/node aging.
+		 * Refill the hole(s).
+		 * Further thrashings will bring us back to case (3) below.
 		 */
-		ra_size = ra->lookahead_index - offset;
+		ra_size = ra->readahead_index - offset;
 	} else {
-		/* After thrashing, we know the exact thrashing-threshold. */
+		/*
+		 * 3) The new chunk is lost.
+		 * It tells us about the thrashing-threshold.
+		 */
 		ra_size = offset - ra->la_index;
 		update_ra_thrash_bytes(mapping->backing_dev_info, ra_size);
 
-		/* And be cooperative: the system may be hunting for memory. */
+		/* Be cooperative: the system may be hunting for memory. */
 		ra_size = MIN_RA_PAGES + ra_size / 2;
 	}
 

--

  parent reply	other threads:[~2007-03-16  8:55 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20070316084856.687942000@mail.ustc.edu.cn>
2007-03-16  8:48 ` [PATCH 00/14] Adaptive readahead update Fengguang Wu
     [not found] ` <20070316085051.601015000@mail.ustc.edu.cn>
2007-03-16  8:48   ` [PATCH 01/14] readahead: state based method: check node id Fengguang Wu
     [not found] ` <20070316085051.787637000@mail.ustc.edu.cn>
2007-03-16  8:48   ` [PATCH 02/14] readahead: state based method: decouple readahead_ratio from growth_limit Fengguang Wu
     [not found] ` <20070316085051.939153000@mail.ustc.edu.cn>
2007-03-16  8:48   ` [PATCH 03/14] readahead: state based method: cancel lookahead gracefully Fengguang Wu
     [not found] ` <20070316085052.111038000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 04/14] readahead: thrashing recovery method: check unbalanced aging Fengguang Wu
     [not found] ` <20070316085052.284256000@mail.ustc.edu.cn>
2007-03-16  8:49   ` Fengguang Wu [this message]
     [not found] ` <20070316085052.388486000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 06/14] readahead: call scheme: cleanup Fengguang Wu
     [not found] ` <20070316085052.550263000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 07/14] readahead: call scheme: catch thrashing on lookahead time Fengguang Wu
     [not found] ` <20070316085052.688674000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 08/14] readahead: remove parameter ra_max from thrashing_recovery_readahead() Fengguang Wu
     [not found] ` <20070316085052.868849000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 09/14] readahead: remove parameter ra_max from adjust_rala*() Fengguang Wu
     [not found] ` <20070316085053.030235000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 10/14] readahead: state based method: protect against tiny size Fengguang Wu
     [not found] ` <20070316085053.155226000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 11/14] readahead: rename state_based_readahead() to clock_based_readahead() Fengguang Wu
     [not found] ` <20070316085053.339604000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 12/14] readahead: account I/O block times for stock readahead Fengguang Wu
     [not found] ` <20070316085053.463858000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 13/14] readahead: rescue_pages() updates Fengguang Wu
     [not found] ` <20070316085053.642868000@mail.ustc.edu.cn>
2007-03-16  8:49   ` [PATCH 14/14] readahead: remove noaction/shrink events Fengguang Wu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=374035059.71212@ustc.edu.cn \
    --to=wfg@mail.ustc.edu.cn \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox