From: Jens Axboe <jens.axboe@oracle.com>
To: Linux Kernel <linux-kernel@vger.kernel.org>
Cc: fengguang.wu@intel.com
Subject: [PATCH] readahead even for FMODE_RANDOM
Date: Thu, 1 Apr 2010 20:31:51 +0200 [thread overview]
Message-ID: <20100401183151.GO23510@kernel.dk> (raw)
Hi,
I got a problem report with fio where larger block size random reads
where markedly slower with buffered IO than with O_DIRECT, and the
initial thought was that perhaps this was some fio oddity. The reporter
eventually discovered that turning off the fadvise hint made it work
fine. So I took a look, and it seems we never do readahead for
FMODE_RANDOM even if the request size is larger than 1 page. That seems
like a bug, if an application is doing eg 16kb random reads, you want to
readahead the 12kb remaining data. On devices where smaller transfer
sizes are slower than larger ones, this can make a large difference.
This patch makes us readahead even for FMODE_RANDOM, iff we'll be
reading more pages in that single read. I ran a quick test here, and it
appears to fix the problem (no difference with fadvise POSIX_FADV_RANDOM
being passed in or not).
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/mm/readahead.c b/mm/readahead.c
index 337b20e..d4b201c 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -501,8 +501,11 @@ void page_cache_sync_readahead(struct address_space *mapping,
if (!ra->ra_pages)
return;
- /* be dumb */
- if (filp->f_mode & FMODE_RANDOM) {
+ /*
+ * Be dumb for files marked as randomly accessed, but do readahead
+ * inside the original request (req_size > 1).
+ */
+ if ((filp->f_mode & FMODE_RANDOM) && req_size == 1) {
force_page_cache_readahead(mapping, filp, offset, req_size);
return;
}
--
Jens Axboe
next reply other threads:[~2010-04-01 18:31 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-01 18:31 Jens Axboe [this message]
2010-04-02 1:23 ` [PATCH] readahead even for FMODE_RANDOM Wu Fengguang
2010-04-02 6:38 ` Jens Axboe
2010-04-02 6:52 ` Wu Fengguang
2010-04-02 6:59 ` Jens Axboe
2010-04-02 7:21 ` 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=20100401183151.GO23510@kernel.dk \
--to=jens.axboe@oracle.com \
--cc=fengguang.wu@intel.com \
--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.