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 25/33] readahead: thrashing recovery method
Date: Fri, 26 May 2006 19:39:31 +0800 [thread overview]
Message-ID: <348644388.06434@ustc.edu.cn> (raw)
Message-ID: <20060526115313.491576583@localhost.localdomain> (raw)
In-Reply-To: 20060526113906.084341801@localhost.localdomain
[-- Attachment #1: readahead-method-onthrash.patch --]
[-- Type: text/plain, Size: 1717 bytes --]
Readahead policy after thrashing.
It tries to recover gracefully from the thrashing.
Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
---
mm/readahead.c | 42 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 42 insertions(+)
--- linux.orig/mm/readahead.c
+++ linux/mm/readahead.c
@@ -1634,6 +1634,48 @@ try_readahead_on_seek(struct file_ra_sta
}
/*
+ * Readahead thrashing recovery.
+ */
+static unsigned long
+thrashing_recovery_readahead(struct address_space *mapping,
+ struct file *filp, struct file_ra_state *ra,
+ pgoff_t index, unsigned long ra_max)
+{
+ unsigned long ra_size;
+
+ if (probe_page(mapping, index - 1))
+ ra_account(ra, RA_EVENT_READAHEAD_MUTILATE,
+ ra->readahead_index - index);
+ ra_account(ra, RA_EVENT_READAHEAD_THRASHING,
+ ra->readahead_index - index);
+
+ /*
+ * Some thrashing occur in (ra_index, la_index], in which case the
+ * old read-ahead chunk is lost soon after the new one is allocated.
+ * Ensure that we recover all needed pages in the old chunk.
+ */
+ if (index < ra->ra_index)
+ ra_size = ra->ra_index - index;
+ else {
+ /* After thrashing, we know the exact thrashing-threshold. */
+ ra_size = ra_cache_hit(ra, 0);
+ update_ra_thrash_bytes(mapping->backing_dev_info, ra_size);
+
+ /* And we'd better be a bit conservative. */
+ ra_size = ra_size * 3 / 4;
+ }
+
+ if (ra_size > ra_max)
+ ra_size = ra_max;
+
+ ra_set_class(ra, RA_CLASS_THRASHING);
+ ra_set_index(ra, index, index);
+ ra_set_size(ra, ra_size, ra_size / LOOKAHEAD_RATIO);
+
+ return ra_dispatch(ra, mapping, filp);
+}
+
+/*
* ra_min is mainly determined by the size of cache memory. Reasonable?
*
* Table of concrete numbers for 4KB page size:
--
next prev parent reply other threads:[~2006-05-26 11:55 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20060526113906.084341801@localhost.localdomain>
[not found] ` <20060526115259.223408850@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 02/33] radixtree: introduce __radix_tree_lookup_parent() Wu Fengguang
2006-05-26 13:56 ` Christoph Lameter
[not found] ` <20060526140951.GA13954@mail.ustc.edu.cn>
2006-05-26 14:09 ` Wu Fengguang
[not found] ` <20060526115259.809011306@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 03/33] radixtree: introduce radix_tree_scan_hole[_backward]() Wu Fengguang
[not found] ` <20060526115300.609227164@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 04/33] mm: introduce probe_pages() Wu Fengguang
[not found] ` <20060526115301.640751284@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 06/33] readahead: add look-ahead support to __do_page_cache_readahead() Wu Fengguang
[not found] ` <20060526115302.278500703@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 07/33] readahead: delay page release in do_generic_mapping_read() Wu Fengguang
[not found] ` <20060526115303.499451943@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 09/33] readahead: {MIN,MAX}_RA_PAGES Wu Fengguang
[not found] ` <20060526115304.094503892@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 10/33] readahead: events accounting Wu Fengguang
[not found] ` <20060526115304.821789643@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 11/33] readahead: rescue_pages() Wu Fengguang
[not found] ` <20060526115305.437903777@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 12/33] readahead: sysctl parameters Wu Fengguang
[not found] ` <20060526115306.535453644@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 14/33] readahead: state based method - aging accounting Wu Fengguang
[not found] ` <20060526115307.794859372@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 16/33] readahead: state based method Wu Fengguang
[not found] ` <20060526115308.522890112@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 17/33] readahead: context " Wu Fengguang
[not found] ` <20060526115309.581525784@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 19/33] readahead: initial method - thrashing guard size Wu Fengguang
[not found] ` <20060526115310.948231030@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 21/33] readahead: initial method - user recommended size Wu Fengguang
[not found] ` <20060526115311.541535720@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 22/33] readahead: initial method Wu Fengguang
[not found] ` <20060526115312.145248016@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 23/33] readahead: backward prefetching method Wu Fengguang
[not found] ` <20060526115313.491576583@localhost.localdomain>
2006-05-26 11:39 ` Wu Fengguang [this message]
[not found] ` <20060526115314.929319286@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 26/33] readahead: call scheme Wu Fengguang
[not found] ` <20060526115315.823465555@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 28/33] readahead: loop case Wu Fengguang
[not found] ` <20060526115316.335626686@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 29/33] readahead: nfsd case Wu Fengguang
[not found] ` <20060526115316.925345724@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 30/33] readahead: turn on by default Wu Fengguang
[not found] ` <20060526115317.663871267@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 31/33] readahead: debug radix tree new functions Wu Fengguang
[not found] ` <20060526115318.181350700@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 32/33] readahead: debug traces showing accessed file names Wu Fengguang
[not found] ` <20060526115318.520512078@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 33/33] readahead: debug traces showing read patterns Wu Fengguang
[not found] <20060524111246.420010595@localhost.localdomain>
[not found] ` <20060524111909.635589701@localhost.localdomain>
2006-05-24 11:13 ` [PATCH 25/33] readahead: thrashing recovery method 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=348644388.06434@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