All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wu Fengguang <wfg@mail.ustc.edu.cn>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org, Wu Fengguang <wfg@mail.ustc.edu.cn>
Subject: [patch 1/4] readahead: state based method - stand-alone size limit code
Date: Tue, 30 May 2006 16:40:31 +0800	[thread overview]
Message-ID: <348978812.17342@ustc.edu.cn> (raw)
Message-ID: <20060530084702.611578500@localhost.localdomain> (raw)
In-Reply-To: 20060530084030.274375770@localhost.localdomain

[-- Attachment #1: readahead-method-stateful-fix-size-limit-sep.patch --]
[-- Type: text/plain, Size: 2594 bytes --]

Separate out the readahead/lookahead sizes limiting code,
and put them to stand-alone limit_rala() function.

Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
---


--- linux-2.6.17-rc4-mm3.orig/mm/readahead.c
+++ linux-2.6.17-rc4-mm3/mm/readahead.c
@@ -1009,10 +1009,8 @@ static int ra_dispatch(struct file_ra_st
  *	- @la_size stores the look-ahead size of previous request.
  */
 static int adjust_rala(unsigned long ra_max,
-				unsigned long *ra_size, unsigned long *la_size)
+			unsigned long *ra_size, unsigned long *la_size)
 {
-	unsigned long stream_shift = *la_size;
-
 	/*
 	 * Substract the old look-ahead to get real safe size for the next
 	 * read-ahead request.
@@ -1029,8 +1027,16 @@ static int adjust_rala(unsigned long ra_
 	 */
 	*la_size = *ra_size / LOOKAHEAD_RATIO;
 
+	return 1;
+}
+
+static void limit_rala(unsigned long ra_max, unsigned long la_old,
+			unsigned long *ra_size, unsigned long *la_size)
+{
+	unsigned long stream_shift;
+
 	/*
-	 * Apply upper limits.
+	 * Apply basic upper limits.
 	 */
 	if (*ra_size > ra_max)
 		*ra_size = ra_max;
@@ -1041,11 +1047,9 @@ static int adjust_rala(unsigned long ra_
 	 * Make sure stream_shift is not too small.
 	 * (So that the next global_shift will not be too small.)
 	 */
-	stream_shift += (*ra_size - *la_size);
+	stream_shift = la_old + (*ra_size - *la_size);
 	if (stream_shift < *ra_size / 4)
 		*la_size -= (*ra_size / 4 - stream_shift);
-
-	return 1;
 }
 
 /*
@@ -1117,13 +1121,13 @@ state_based_readahead(struct address_spa
 			struct page *page, pgoff_t index,
 			unsigned long req_size, unsigned long ra_max)
 {
-	unsigned long ra_old;
-	unsigned long ra_size;
-	unsigned long la_size;
+	unsigned long ra_old, ra_size;
+	unsigned long la_old, la_size;
 	unsigned long remain_space;
 	unsigned long growth_limit;
 
-	la_size = ra->readahead_index - index;
+	la_old = la_size = ra->readahead_index - index;
+	ra_old = ra_readahead_size(ra);
 	ra_size = compute_thrashing_threshold(ra, &remain_space);
 
 	if (page && remain_space <= la_size && la_size > 1) {
@@ -1131,7 +1135,6 @@ state_based_readahead(struct address_spa
 		return 0;
 	}
 
-	ra_old = ra_readahead_size(ra);
 	growth_limit = req_size;
 	growth_limit += ra_max / 16;
 	growth_limit += (2 + readahead_ratio / 64) * ra_old;
@@ -1141,6 +1144,8 @@ state_based_readahead(struct address_spa
 	if (!adjust_rala(growth_limit, &ra_size, &la_size))
 		return 0;
 
+	limit_rala(growth_limit, la_old, &ra_size, &la_size);
+
 	ra_set_class(ra, RA_CLASS_STATE);
 	ra_set_index(ra, index, ra->readahead_index);
 	ra_set_size(ra, ra_size, la_size);

--

  parent reply	other threads:[~2006-05-30  8:46 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-30  8:40 [patch 0/4] Adaptive readahead patchset V14 updates Wu Fengguang
2006-05-30  8:40 ` Wu Fengguang
2006-05-30  8:40 ` Wu Fengguang [this message]
2006-05-30  8:40   ` [patch 1/4] readahead: state based method - stand-alone size limit code Wu Fengguang
2006-05-30  8:40 ` [patch 3/4] readahead: context based method - fix *remain counting Wu Fengguang
2006-05-30  8:40   ` Wu Fengguang
2006-05-30  8:40 ` [patch 4/4] readahead: backward prefetching method - add use case comment Wu Fengguang
2006-05-30  8:40   ` Wu Fengguang

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=348978812.17342@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.