public inbox for linux-kernel@vger.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>,
	J?rn Engel <joern@wohnheim.fh-wedel.de>,
	Ingo Oeser <ioe-lkml@rameria.de>
Subject: [PATCH 09/33] readahead: events accounting
Date: Wed, 24 May 2006 19:12:55 +0800	[thread overview]
Message-ID: <348469540.16036@ustc.edu.cn> (raw)
Message-ID: <20060524111901.581603095@localhost.localdomain> (raw)
In-Reply-To: 20060524111246.420010595@localhost.localdomain

[-- Attachment #1: readahead-events-accounting.patch --]
[-- Type: text/plain, Size: 10611 bytes --]

A debugfs file named `readahead/events' is created according to advises from
J?rn Engel, Andrew Morton and Ingo Oeser.

It reveals various read-ahead activities/events, and is vital to the testing.

---------------------------
If you are experiencing performance problems, or want to help improve the
read-ahead logic, please send me the debug data. Thanks.

- Preparations

## First compile kernel with CONFIG_DEBUG_READAHEAD
mkdir /debug
mount -t debug none /debug

- For each session with distinct access pattern

echo > /debug/readahead/events # reset the counters
# echo > /var/log/kern.log # you may want to backup it first
# echo 3 > /debug/readahead/debug_level # show verbose printk traces
## do one benchmark/task
# echo 1 > /debug/readahead/debug_level # revert to normal value
cp /debug/readahead/events readahead-events-`date +'%F_%R'`
# bzip2 -c /var/log/kern.log > kern.log-`date +'%F_%R'`.bz2

The commented out commands can uncover more detailed file accesses,
which are useful sometimes. Note that the log file can grow huge!

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

 mm/readahead.c |  293 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 292 insertions(+), 1 deletion(-)

--- linux-2.6.17-rc4-mm3.orig/mm/readahead.c
+++ linux-2.6.17-rc4-mm3/mm/readahead.c
@@ -19,12 +19,76 @@
 #include <linux/writeback.h>
 #include <linux/nfsd/const.h>
 
+/*
+ * Detailed classification of read-ahead behaviors.
+ */
+#define RA_CLASS_SHIFT 4
+#define RA_CLASS_MASK  ((1 << RA_CLASS_SHIFT) - 1)
+enum ra_class {
+	RA_CLASS_ALL,
+	RA_CLASS_INITIAL,
+	RA_CLASS_STATE,
+	RA_CLASS_CONTEXT,
+	RA_CLASS_CONTEXT_AGGRESSIVE,
+	RA_CLASS_BACKWARD,
+	RA_CLASS_THRASHING,
+	RA_CLASS_SEEK,
+	RA_CLASS_NONE,
+	RA_CLASS_COUNT
+};
+
+/* Read-ahead events to be accounted. */
+enum ra_event {
+	RA_EVENT_CACHE_MISS,		/* read cache misses */
+	RA_EVENT_RANDOM_READ,		/* random reads */
+	RA_EVENT_IO_CONGESTION,		/* i/o congestion */
+	RA_EVENT_IO_CACHE_HIT,		/* canceled i/o due to cache hit */
+	RA_EVENT_IO_BLOCK,		/* wait for i/o completion */
+
+	RA_EVENT_READAHEAD,		/* read-ahead issued */
+	RA_EVENT_READAHEAD_HIT,		/* read-ahead page hit */
+	RA_EVENT_LOOKAHEAD,		/* look-ahead issued */
+	RA_EVENT_LOOKAHEAD_HIT,		/* look-ahead mark hit */
+	RA_EVENT_LOOKAHEAD_NOACTION,	/* look-ahead mark ignored */
+	RA_EVENT_READAHEAD_MMAP,	/* read-ahead for mmap access */
+	RA_EVENT_READAHEAD_EOF,		/* read-ahead reaches EOF */
+	RA_EVENT_READAHEAD_SHRINK,	/* ra_size falls under previous la_size */
+	RA_EVENT_READAHEAD_THRASHING,	/* read-ahead thrashing happened */
+	RA_EVENT_READAHEAD_MUTILATE,	/* read-ahead mutilated by imbalanced aging */
+	RA_EVENT_READAHEAD_RESCUE,	/* read-ahead rescued */
+
+	RA_EVENT_READAHEAD_CUBE,
+	RA_EVENT_COUNT
+};
+
+#ifdef CONFIG_DEBUG_READAHEAD
+u32 initial_ra_hit;
+u32 initial_ra_miss;
+u32 debug_level = 1;
+u32 disable_stateful_method = 0;
+static const char * const ra_class_name[];
+static void ra_account(struct file_ra_state *ra, enum ra_event e, int pages);
+#  define debug_inc(var)		do { var++; } while (0)
+#  define debug_option(o)		(o)
+#else
+#  define ra_account(ra, e, pages)	do { } while (0)
+#  define debug_inc(var)		do { } while (0)
+#  define debug_option(o)		(0)
+#  define debug_level 			(0)
+#endif /* CONFIG_DEBUG_READAHEAD */
+
+#define dprintk(args...) \
+	do { if (debug_level >= 2) printk(KERN_DEBUG args); } while(0)
+#define ddprintk(args...) \
+	do { if (debug_level >= 3) printk(KERN_DEBUG args); } while(0)
+
 #define PAGES_BYTE(size) (((size) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
 #define PAGES_KB(size)	 PAGES_BYTE((size)*1024)
 
 #define next_page(pg) (list_entry((pg)->lru.prev, struct page, lru))
 #define prev_page(pg) (list_entry((pg)->lru.next, struct page, lru))
 
+
 void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page)
 {
 }
@@ -365,6 +429,9 @@ int force_page_cache_readahead(struct ad
 		offset += this_chunk;
 		nr_to_read -= this_chunk;
 	}
+
+	ra_account(NULL, RA_EVENT_READAHEAD, ret);
+
 	return ret;
 }
 
@@ -400,10 +467,16 @@ static inline int check_ra_success(struc
 int do_page_cache_readahead(struct address_space *mapping, struct file *filp,
 			pgoff_t offset, unsigned long nr_to_read)
 {
+	unsigned long ret;
+
 	if (bdi_read_congested(mapping->backing_dev_info))
 		return -1;
 
-	return __do_page_cache_readahead(mapping, filp, offset, nr_to_read, 0);
+	ret = __do_page_cache_readahead(mapping, filp, offset, nr_to_read, 0);
+
+	ra_account(NULL, RA_EVENT_READAHEAD, ret);
+
+	return ret;
 }
 
 /*
@@ -425,6 +498,10 @@ blockable_page_cache_readahead(struct ad
 
 	actual = __do_page_cache_readahead(mapping, filp, offset, nr_to_read, 0);
 
+	ra_account(NULL, RA_EVENT_READAHEAD, actual);
+	dprintk("blockable-readahead(ino=%lu, ra=%lu+%lu) = %d\n",
+			mapping->host->i_ino, offset, nr_to_read, actual);
+
 	return check_ra_success(ra, nr_to_read, actual);
 }
 
@@ -604,3 +681,217 @@ unsigned long max_sane_readahead(unsigne
 	__get_zone_counts(&active, &inactive, &free, NODE_DATA(numa_node_id()));
 	return min(nr, (inactive + free) / 2);
 }
+
+/*
+ * Read-ahead events accounting.
+ */
+#ifdef CONFIG_DEBUG_READAHEAD
+
+#include <linux/init.h>
+#include <linux/jiffies.h>
+#include <linux/debugfs.h>
+#include <linux/seq_file.h>
+
+static const char * const ra_class_name[] = {
+	"total",
+	"initial",
+	"state",
+	"context",
+	"contexta",
+	"backward",
+	"onthrash",
+	"onseek",
+	"none"
+};
+
+static const char * const ra_event_name[] = {
+	"cache_miss",
+	"random_read",
+	"io_congestion",
+	"io_cache_hit",
+	"io_block",
+	"readahead",
+	"readahead_hit",
+	"lookahead",
+	"lookahead_hit",
+	"lookahead_ignore",
+	"readahead_mmap",
+	"readahead_eof",
+	"readahead_shrink",
+	"readahead_thrash",
+	"readahead_mutilt",
+	"readahead_rescue"
+};
+
+static unsigned long ra_events[RA_CLASS_COUNT][RA_EVENT_COUNT][2];
+
+static void ra_account(struct file_ra_state *ra, enum ra_event e, int pages)
+{
+	enum ra_class c;
+
+	if (!debug_level)
+		return;
+
+	if (e == RA_EVENT_READAHEAD_HIT && pages < 0) {
+		c = (ra->flags >> RA_CLASS_SHIFT) & RA_CLASS_MASK;
+		pages = -pages;
+	} else if (ra)
+		c = ra->flags & RA_CLASS_MASK;
+	else
+		c = RA_CLASS_NONE;
+
+	if (!c)
+		c = RA_CLASS_NONE;
+
+	ra_events[c][e][0] += 1;
+	ra_events[c][e][1] += pages;
+
+	if (e == RA_EVENT_READAHEAD)
+		ra_events[c][RA_EVENT_READAHEAD_CUBE][1] += pages * pages;
+}
+
+static int ra_events_show(struct seq_file *s, void *_)
+{
+	int i;
+	int c;
+	int e;
+	static const char event_fmt[] = "%-16s";
+	static const char class_fmt[] = "%10s";
+	static const char item_fmt[] = "%10lu";
+	static const char percent_format[] = "%9lu%%";
+	static const char * const table_name[] = {
+		"[table requests]",
+		"[table pages]",
+		"[table summary]"};
+
+	for (i = 0; i <= 1; i++) {
+		for (e = 0; e < RA_EVENT_COUNT; e++) {
+			ra_events[RA_CLASS_ALL][e][i] = 0;
+			for (c = RA_CLASS_INITIAL; c < RA_CLASS_NONE; c++)
+				ra_events[RA_CLASS_ALL][e][i] += ra_events[c][e][i];
+		}
+
+		seq_printf(s, event_fmt, table_name[i]);
+		for (c = 0; c < RA_CLASS_COUNT; c++)
+			seq_printf(s, class_fmt, ra_class_name[c]);
+		seq_puts(s, "\n");
+
+		for (e = 0; e < RA_EVENT_COUNT; e++) {
+			if (e == RA_EVENT_READAHEAD_CUBE)
+				continue;
+			if (e == RA_EVENT_READAHEAD_HIT && i == 0)
+				continue;
+			if (e == RA_EVENT_IO_BLOCK && i == 1)
+				continue;
+
+			seq_printf(s, event_fmt, ra_event_name[e]);
+			for (c = 0; c < RA_CLASS_COUNT; c++)
+				seq_printf(s, item_fmt, ra_events[c][e][i]);
+			seq_puts(s, "\n");
+		}
+		seq_puts(s, "\n");
+	}
+
+	seq_printf(s, event_fmt, table_name[2]);
+	for (c = 0; c < RA_CLASS_COUNT; c++)
+		seq_printf(s, class_fmt, ra_class_name[c]);
+	seq_puts(s, "\n");
+
+	seq_printf(s, event_fmt, "random_rate");
+	for (c = 0; c < RA_CLASS_COUNT; c++)
+		seq_printf(s, percent_format,
+			(ra_events[c][RA_EVENT_RANDOM_READ][0] * 100) /
+			((ra_events[c][RA_EVENT_RANDOM_READ][0] +
+			  ra_events[c][RA_EVENT_READAHEAD][0]) | 1));
+	seq_puts(s, "\n");
+
+	seq_printf(s, event_fmt, "ra_hit_rate");
+	for (c = 0; c < RA_CLASS_COUNT; c++)
+		seq_printf(s, percent_format,
+			(ra_events[c][RA_EVENT_READAHEAD_HIT][1] * 100) /
+			(ra_events[c][RA_EVENT_READAHEAD][1] | 1));
+	seq_puts(s, "\n");
+
+	seq_printf(s, event_fmt, "la_hit_rate");
+	for (c = 0; c < RA_CLASS_COUNT; c++)
+		seq_printf(s, percent_format,
+			(ra_events[c][RA_EVENT_LOOKAHEAD_HIT][0] * 100) /
+			(ra_events[c][RA_EVENT_LOOKAHEAD][0] | 1));
+	seq_puts(s, "\n");
+
+	seq_printf(s, event_fmt, "var_ra_size");
+	for (c = 0; c < RA_CLASS_COUNT; c++)
+		seq_printf(s, item_fmt,
+			(ra_events[c][RA_EVENT_READAHEAD_CUBE][1] -
+			 ra_events[c][RA_EVENT_READAHEAD][1] *
+			(ra_events[c][RA_EVENT_READAHEAD][1] /
+			(ra_events[c][RA_EVENT_READAHEAD][0] | 1))) /
+			(ra_events[c][RA_EVENT_READAHEAD][0] | 1));
+	seq_puts(s, "\n");
+
+	seq_printf(s, event_fmt, "avg_ra_size");
+	for (c = 0; c < RA_CLASS_COUNT; c++)
+		seq_printf(s, item_fmt,
+			(ra_events[c][RA_EVENT_READAHEAD][1] +
+			 ra_events[c][RA_EVENT_READAHEAD][0] / 2) /
+			(ra_events[c][RA_EVENT_READAHEAD][0] | 1));
+	seq_puts(s, "\n");
+
+	seq_printf(s, event_fmt, "avg_la_size");
+	for (c = 0; c < RA_CLASS_COUNT; c++)
+		seq_printf(s, item_fmt,
+			(ra_events[c][RA_EVENT_LOOKAHEAD][1] +
+			 ra_events[c][RA_EVENT_LOOKAHEAD][0] / 2) /
+			(ra_events[c][RA_EVENT_LOOKAHEAD][0] | 1));
+	seq_puts(s, "\n");
+
+	return 0;
+}
+
+static int ra_events_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, ra_events_show, NULL);
+}
+
+static ssize_t ra_events_write(struct file *file, const char __user *buf,
+						size_t size, loff_t *offset)
+{
+	memset(ra_events, 0, sizeof(ra_events));
+	return 1;
+}
+
+struct file_operations ra_events_fops = {
+	.owner		= THIS_MODULE,
+	.open		= ra_events_open,
+	.write		= ra_events_write,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+#define READAHEAD_DEBUGFS_ENTRY_U32(var) \
+	debugfs_create_u32(__stringify(var), 0644, root, &var)
+
+#define READAHEAD_DEBUGFS_ENTRY_BOOL(var) \
+	debugfs_create_bool(__stringify(var), 0644, root, &var)
+
+static int __init readahead_init(void)
+{
+	struct dentry *root;
+
+	root = debugfs_create_dir("readahead", NULL);
+
+	debugfs_create_file("events", 0644, root, NULL, &ra_events_fops);
+
+	READAHEAD_DEBUGFS_ENTRY_U32(initial_ra_hit);
+	READAHEAD_DEBUGFS_ENTRY_U32(initial_ra_miss);
+
+	READAHEAD_DEBUGFS_ENTRY_U32(debug_level);
+	READAHEAD_DEBUGFS_ENTRY_BOOL(disable_stateful_method);
+
+	return 0;
+}
+
+module_init(readahead_init)
+
+#endif /* CONFIG_DEBUG_READAHEAD */

--

  parent reply	other threads:[~2006-05-24 11:28 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] ` <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] ` <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   ` Wu Fengguang [this message]
2006-05-25 16:36     ` [PATCH 09/33] readahead: events accounting 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] ` <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] ` <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   ` [PATCH 20/33] readahead: initial method - expected read size Wu Fengguang
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.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
     [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

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=348469540.16036@ustc.edu.cn \
    --to=wfg@mail.ustc.edu.cn \
    --cc=akpm@osdl.org \
    --cc=ioe-lkml@rameria.de \
    --cc=joern@wohnheim.fh-wedel.de \
    --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