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 20/33] readahead: initial method - expected read size
Date: Wed, 24 May 2006 19:13:06 +0800 [thread overview]
Message-ID: <348469546.16482@ustc.edu.cn> (raw)
Message-ID: <20060524111907.134685550@localhost.localdomain> (raw)
In-Reply-To: 20060524111246.420010595@localhost.localdomain
[-- Attachment #1: readahead-method-initial-size-expect.patch --]
[-- Type: text/plain, Size: 3385 bytes --]
backing_dev_info.ra_expect_bytes is dynamicly updated to be the expected
read pages on start-of-file. It allows the initial readahead to be more
aggressive and hence efficient.
Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
---
fs/file_table.c | 7 ++++++
include/linux/mm.h | 1
mm/readahead.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 63 insertions(+)
--- linux-2.6.17-rc4-mm3.orig/include/linux/mm.h
+++ linux-2.6.17-rc4-mm3/include/linux/mm.h
@@ -1032,6 +1032,7 @@ unsigned long page_cache_readahead(struc
void handle_ra_miss(struct address_space *mapping,
struct file_ra_state *ra, pgoff_t offset);
unsigned long max_sane_readahead(unsigned long nr);
+void fastcall readahead_close(struct file *file);
#ifdef CONFIG_ADAPTIVE_READAHEAD
extern int readahead_ratio;
--- linux-2.6.17-rc4-mm3.orig/fs/file_table.c
+++ linux-2.6.17-rc4-mm3/fs/file_table.c
@@ -12,6 +12,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/smp_lock.h>
+#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/security.h>
#include <linux/eventpoll.h>
@@ -160,6 +161,12 @@ void fastcall __fput(struct file *file)
might_sleep();
fsnotify_close(file);
+
+#ifdef CONFIG_ADAPTIVE_READAHEAD
+ if (file->f_ra.flags & RA_FLAG_EOF)
+ readahead_close(file);
+#endif
+
/*
* The function eventpoll_release() should be the first called
* in the file cleanup chain.
--- linux-2.6.17-rc4-mm3.orig/mm/readahead.c
+++ linux-2.6.17-rc4-mm3/mm/readahead.c
@@ -1555,6 +1555,61 @@ static inline void get_readahead_bounds(
PAGES_KB(128)), *ra_max / 2);
}
+/*
+ * When closing a normal readonly file,
+ * - on cache hit: increase `backing_dev_info.ra_expect_bytes' slowly;
+ * - on cache miss: decrease it rapidly.
+ *
+ * The resulted `ra_expect_bytes' answers the question of:
+ * How many pages are expected to be read on start-of-file?
+ */
+void fastcall readahead_close(struct file *file)
+{
+ struct inode *inode = file->f_dentry->d_inode;
+ struct address_space *mapping = inode->i_mapping;
+ struct backing_dev_info *bdi = mapping->backing_dev_info;
+ unsigned long pos = file->f_pos;
+ unsigned long pgrahit = file->f_ra.cache_hits;
+ unsigned long pgaccess = 1 + pos / PAGE_CACHE_SIZE;
+ unsigned long pgcached = mapping->nrpages;
+
+ if (!pos) /* pread */
+ return;
+
+ if (pgcached > bdi->ra_pages0) /* excessive reads */
+ return;
+
+ if (pgaccess >= pgcached) {
+ if (bdi->ra_expect_bytes < bdi->ra_pages0 * PAGE_CACHE_SIZE)
+ bdi->ra_expect_bytes += pgcached * PAGE_CACHE_SIZE / 8;
+
+ debug_inc(initial_ra_hit);
+ dprintk("initial_ra_hit on file %s size %lluK "
+ "pos %lu by %s(%d)\n",
+ file->f_dentry->d_name.name,
+ i_size_read(inode) / 1024,
+ pos,
+ current->comm, current->pid);
+ } else {
+ unsigned long missed;
+
+ missed = (pgcached - pgaccess) * PAGE_CACHE_SIZE;
+ if (bdi->ra_expect_bytes >= missed / 2)
+ bdi->ra_expect_bytes -= missed / 2;
+
+ debug_inc(initial_ra_miss);
+ dprintk("initial_ra_miss on file %s "
+ "size %lluK cached %luK hit %luK "
+ "pos %lu by %s(%d)\n",
+ file->f_dentry->d_name.name,
+ i_size_read(inode) / 1024,
+ pgcached << (PAGE_CACHE_SHIFT - 10),
+ pgrahit << (PAGE_CACHE_SHIFT - 10),
+ pos,
+ current->comm, current->pid);
+ }
+}
+
#endif /* CONFIG_ADAPTIVE_READAHEAD */
/*
--
next prev parent reply other threads:[~2006-05-24 11:20 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20060524111246.420010595@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 00/33] Adaptive read-ahead V12 Wu Fengguang
2006-05-25 15:44 ` Andrew Morton
2006-05-25 19:26 ` Michael Stone
2006-05-25 19:40 ` David Lang
2006-05-25 22:01 ` Andrew Morton
2006-05-25 20:28 ` David Lang
2006-05-26 0:48 ` Michael Stone
[not found] ` <20060526011939.GA6220@mail.ustc.edu.cn>
2006-05-26 1:19 ` Wu Fengguang
2006-05-26 2:10 ` Jon Smirl
2006-05-26 3:14 ` Nick Piggin
2006-05-26 14:00 ` Andi Kleen
2006-05-26 16:25 ` Andrew Morton
2006-05-26 23:54 ` Folkert van Heusden
2006-05-27 0:00 ` Con Kolivas
2006-05-27 0:08 ` Con Kolivas
2006-05-28 22:20 ` Diego Calleja
2006-05-28 22:31 ` kernel
[not found] ` <20060529030445.GB5994@mail.ustc.edu.cn>
2006-05-29 3:04 ` Wu Fengguang
[not found] ` <20060524111857.983845462@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 02/33] radixtree: look-aside cache Wu Fengguang
[not found] ` <20060524111858.357709745@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 03/33] radixtree: hole scanning functions Wu Fengguang
2006-05-25 16:19 ` Andrew Morton
[not found] ` <20060526070416.GB5135@mail.ustc.edu.cn>
2006-05-26 7:04 ` Wu Fengguang
[not found] ` <20060526110559.GA14398@mail.ustc.edu.cn>
2006-05-26 11:05 ` Wu Fengguang
2006-05-26 16:19 ` Andrew Morton
[not found] ` <20060524111859.540640819@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 05/33] readahead: refactor do_generic_mapping_read() Wu Fengguang
[not found] ` <20060524111859.909928820@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 06/33] readahead: refactor __do_page_cache_readahead() Wu Fengguang
2006-05-25 16:30 ` Andrew Morton
2006-05-25 22:33 ` Paul Mackerras
2006-05-25 22:40 ` Andrew Morton
[not found] ` <20060526071339.GE5135@mail.ustc.edu.cn>
2006-05-26 7:13 ` Wu Fengguang
[not found] ` <20060524111900.419314658@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 07/33] readahead: insert cond_resched() calls Wu Fengguang
[not found] ` <20060524111900.970898174@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 08/33] readahead: common macros Wu Fengguang
2006-05-25 5:56 ` Nick Piggin
[not found] ` <20060525104117.GE4996@mail.ustc.edu.cn>
2006-05-25 10:41 ` Wu Fengguang
2006-05-26 3:33 ` Nick Piggin
[not found] ` <20060526065906.GA5135@mail.ustc.edu.cn>
2006-05-26 6:59 ` Wu Fengguang
[not found] ` <20060525134224.GJ4996@mail.ustc.edu.cn>
2006-05-25 13:42 ` Wu Fengguang
2006-05-25 14:38 ` Andrew Morton
2006-05-25 16:33 ` Andrew Morton
[not found] ` <20060524111901.581603095@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 09/33] readahead: events accounting Wu Fengguang
2006-05-25 16:36 ` Andrew Morton
[not found] ` <20060526070943.GD5135@mail.ustc.edu.cn>
2006-05-26 7:09 ` Wu Fengguang
[not found] ` <20060527132002.GA4814@mail.ustc.edu.cn>
2006-05-27 13:20 ` Wu Fengguang
2006-05-29 8:19 ` Martin Peschke
[not found] ` <20060524111901.976888971@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 10/33] readahead: support functions Wu Fengguang
2006-05-25 5:13 ` Nick Piggin
[not found] ` <20060525111318.GH4996@mail.ustc.edu.cn>
2006-05-25 11:13 ` Wu Fengguang
2006-05-25 16:48 ` Andrew Morton
[not found] ` <20060526073114.GH5135@mail.ustc.edu.cn>
2006-05-26 7:31 ` Wu Fengguang
[not found] ` <20060524111902.491708692@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 11/33] readahead: sysctl parameters Wu Fengguang
2006-05-25 4:50 ` [PATCH 12/33] readahead: min/max sizes Nick Piggin
[not found] ` <20060525121206.GI4996@mail.ustc.edu.cn>
2006-05-25 12:12 ` Wu Fengguang
[not found] ` <20060524111903.510268987@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 13/33] readahead: state based method - aging accounting Wu Fengguang
2006-05-26 17:04 ` Andrew Morton
[not found] ` <20060527062234.GB4991@mail.ustc.edu.cn>
2006-05-27 6:22 ` Wu Fengguang
2006-05-27 7:00 ` Andrew Morton
[not found] ` <20060527072201.GA5284@mail.ustc.edu.cn>
2006-05-27 7:22 ` Wu Fengguang
[not found] ` <20060524111904.019763011@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 14/33] readahead: state based method - data structure Wu Fengguang
2006-05-25 6:03 ` Nick Piggin
[not found] ` <20060525104353.GF4996@mail.ustc.edu.cn>
2006-05-25 10:43 ` Wu Fengguang
2006-05-26 17:05 ` Andrew Morton
[not found] ` <20060527070248.GD4991@mail.ustc.edu.cn>
2006-05-27 7:02 ` Wu Fengguang
[not found] ` <20060527082758.GF4991@mail.ustc.edu.cn>
2006-05-27 8:27 ` Wu Fengguang
[not found] ` <20060524111904.683513683@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 15/33] readahead: state based method - routines Wu Fengguang
2006-05-26 17:15 ` Andrew Morton
[not found] ` <20060527020616.GA7418@mail.ustc.edu.cn>
2006-05-27 2:06 ` Wu Fengguang
[not found] ` <20060524111906.245276338@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 18/33] readahead: initial method - guiding sizes Wu Fengguang
[not found] ` <20060524111906.588647885@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 19/33] readahead: initial method - thrashing guard size Wu Fengguang
[not found] ` <20060524111907.134685550@localhost.localdomain>
2006-05-24 11:13 ` Wu Fengguang [this message]
2006-05-25 5:34 ` [PATCH 22/33] readahead: initial method Nick Piggin
[not found] ` <20060525085957.GC4996@mail.ustc.edu.cn>
2006-05-25 8:59 ` Wu Fengguang
2006-05-26 17:29 ` [PATCH 20/33] readahead: initial method - expected read size Andrew Morton
[not found] ` <20060527063826.GC4991@mail.ustc.edu.cn>
2006-05-27 6:38 ` Wu Fengguang
[not found] ` <20060524111908.569533741@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 23/33] readahead: backward prefetching method Wu Fengguang
2006-05-26 17:37 ` Nate Diller
2006-05-26 19:22 ` Nathan Scott
[not found] ` <20060528123006.GC6478@mail.ustc.edu.cn>
2006-05-28 12:30 ` Wu Fengguang
[not found] ` <20060524111909.147416866@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 24/33] readahead: seeking reads method Wu Fengguang
[not found] ` <20060524111909.635589701@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 25/33] readahead: thrashing recovery method Wu Fengguang
[not found] ` <20060524111910.207894375@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 26/33] readahead: call scheme Wu Fengguang
[not found] ` <20060524111910.544274094@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 27/33] readahead: laptop mode Wu Fengguang
2006-05-26 17:38 ` Andrew Morton
[not found] ` <20060524111911.607080495@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 29/33] readahead: nfsd case Wu Fengguang
[not found] ` <20060524111912.156646847@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 30/33] readahead: turn on by default Wu Fengguang
[not found] ` <20060524111912.485160282@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 31/33] readahead: debug radix tree new functions Wu Fengguang
[not found] ` <20060524111912.967392912@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 32/33] readahead: debug traces showing accessed file names Wu Fengguang
[not found] ` <20060524111913.603476893@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 33/33] readahead: debug traces showing read patterns Wu Fengguang
[not found] ` <20060524111858.869793445@localhost.localdomain>
2006-05-24 11:12 ` [PATCH 04/33] readahead: page flag PG_readahead Wu Fengguang
2006-05-25 16:23 ` Andrew Morton
[not found] ` <20060526070646.GC5135@mail.ustc.edu.cn>
2006-05-26 7:06 ` Wu Fengguang
2006-05-24 12:27 ` Peter Zijlstra
[not found] ` <20060524123740.GA16304@mail.ustc.edu.cn>
2006-05-24 12:37 ` Wu Fengguang
2006-05-24 12:48 ` Peter Zijlstra
[not found] ` <20060524111905.586110688@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 17/33] readahead: context based method Wu Fengguang
2006-05-25 5:26 ` Nick Piggin
[not found] ` <20060525080308.GB4996@mail.ustc.edu.cn>
2006-05-25 8:03 ` Wu Fengguang
2006-05-26 17:23 ` Andrew Morton
[not found] ` <20060527021252.GB7418@mail.ustc.edu.cn>
2006-05-27 2:12 ` Wu Fengguang
2006-05-26 17:27 ` Andrew Morton
[not found] ` <20060527080443.GE4991@mail.ustc.edu.cn>
2006-05-27 8:04 ` Wu Fengguang
2006-05-24 12:37 ` Peter Zijlstra
[not found] ` <20060524133353.GA16508@mail.ustc.edu.cn>
2006-05-24 13:33 ` Wu Fengguang
2006-05-24 15:53 ` Peter Zijlstra
[not found] ` <20060525012556.GA6111@mail.ustc.edu.cn>
2006-05-25 1:25 ` Wu Fengguang
[not found] ` <20060524111911.032100160@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 28/33] readahead: loop case Wu Fengguang
2006-05-24 14:01 ` Limin Wang
[not found] ` <20060525154846.GA6907@mail.ustc.edu.cn>
2006-05-25 15:48 ` wfg
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=348469546.16482@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