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: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 3/9] readahead: auto detection of sequential mmap reads
Date: Sun, 16 Dec 2007 19:59:31 +0800	[thread overview]
Message-ID: <397806668.34228@ustc.edu.cn> (raw)
Message-ID: <20071216120417.905514988@mail.ustc.edu.cn> (raw)
In-Reply-To: 20071216115927.986126305@mail.ustc.edu.cn

[-- Attachment #1: readahead-auto-detect-mmap-sequential-reads.patch --]
[-- Type: text/plain, Size: 1295 bytes --]

Auto-detect sequential mmap reads and do sync/async readahead for them.

The sequential mmap readahead will be triggered when
- sync readahead: it's a major fault and (prev_offset==offset-1);
- async readahead: minor fault on PG_readahead page with valid readahead state.

It's a bit conservative to require valid readahead state for async readahead,
which means we don't do readahead for interleaved reads for now, but let's make
it safe for this initial try.

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

---
 mm/filemap.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- linux-2.6.24-rc4-mm1.orig/mm/filemap.c
+++ linux-2.6.24-rc4-mm1/mm/filemap.c
@@ -1318,7 +1318,8 @@ static void do_sync_mmap_readahead(struc
 	if (VM_RandomReadHint(vma))
 		return;
 
-	if (VM_SequentialReadHint(vma)) {
+	if (VM_SequentialReadHint(vma) ||
+			offset - 1 == (ra->prev_pos >> PAGE_CACHE_SHIFT)) {
 		page_cache_sync_readahead(mapping, ra, file, offset, 1);
 		return;
 	}
@@ -1360,7 +1361,8 @@ static void do_async_mmap_readahead(stru
 		return;
 	if (ra->mmap_miss > 0)
 		ra->mmap_miss--;
-	if (PageReadahead(page))
+	if (PageReadahead(page) &&
+			offset == ra->start + ra->size - ra->async_size)
 		page_cache_async_readahead(mapping, ra, file, page, offset, 1);
 }
 

-- 

  parent reply	other threads:[~2007-12-16 12:04 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20071216115927.986126305@mail.ustc.edu.cn>
2007-12-16 11:59 ` [PATCH 0/9] mmap read-around and readahead Fengguang Wu
2007-12-16 23:35   ` Linus Torvalds
     [not found]     ` <E1J4atl-0000UI-4a@localhost>
2007-12-18 11:46       ` Fengguang Wu
     [not found]     ` <20071218114609.GA27778@mail.ustc.edu.cn>
     [not found]       ` <E1J4bK6-0001BG-Mp@localhost>
2007-12-18 12:13         ` Fengguang Wu
     [not found]     ` <E1J4tUN-0002IB-F6@localhost>
2007-12-19  7:37       ` Fengguang Wu
     [not found] ` <20071216120417.586021813@mail.ustc.edu.cn>
2007-12-16 11:59   ` [PATCH 1/9] readahead: simplify readahead call scheme Fengguang Wu
     [not found] ` <20071216120417.905514988@mail.ustc.edu.cn>
2007-12-16 11:59   ` Fengguang Wu [this message]
     [not found] ` <20071216120418.055796608@mail.ustc.edu.cn>
2007-12-16 11:59   ` [PATCH 4/9] readahead: quick startup on sequential mmap readahead Fengguang Wu
     [not found] ` <20071216120418.201213716@mail.ustc.edu.cn>
2007-12-16 11:59   ` [PATCH 5/9] readahead: make ra_submit() non-static Fengguang Wu
     [not found] ` <20071216120418.360445517@mail.ustc.edu.cn>
2007-12-16 11:59   ` [PATCH 6/9] readahead: save mmap read-around states in file_ra_state Fengguang Wu
     [not found] ` <20071216120418.498110756@mail.ustc.edu.cn>
2007-12-16 11:59   ` [PATCH 7/9] readahead: remove unused do_page_cache_readahead() Fengguang Wu
     [not found] ` <20071216120418.639781633@mail.ustc.edu.cn>
2007-12-16 11:59   ` [PATCH 8/9] readahead: move max_sane_readahead() calls into force_page_cache_readahead() Fengguang Wu
     [not found] ` <20071216120418.787765636@mail.ustc.edu.cn>
2007-12-16 11:59   ` [PATCH 9/9] readahead: call max_sane_readahead() in ondemand_readahead() Fengguang Wu
     [not found] ` <20071216120417.748714367@mail.ustc.edu.cn>
2007-12-16 11:59   ` [PATCH 2/9] readahead: clean up and simplify the code for filemap page fault readahead Fengguang Wu
2007-12-18  8:19   ` Nick Piggin
     [not found]     ` <E1J4ay1-0000ak-3e@localhost>
2007-12-18 11:50       ` Fengguang Wu
2007-12-18 23:54       ` Nick Piggin
     [not found]         ` <E1J4spp-0001pR-JQ@localhost>
2007-12-19  6:55           ` Fengguang Wu
     [not found] <20071222013147.897522982@mail.ustc.edu.cn>
     [not found] ` <20071222013314.837299924@mail.ustc.edu.cn>
2007-12-22  1:31   ` [PATCH 3/9] readahead: auto detection of sequential mmap reads 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=397806668.34228@ustc.edu.cn \
    --to=wfg@mail.ustc.edu.cn \
    --cc=akpm@osdl.org \
    --cc=torvalds@linux-foundation.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