The patch titled readahead: sysctl parameters has been added to the -mm tree. Its filename is readahead-sysctl-parameters.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: readahead: sysctl parameters From: Wu Fengguang <wfg@xxxxxxxxxxxxxxxx> Add new sysctl entries in /proc/sys/vm: - readahead_ratio = 50 i.e. set read-ahead size to <=(readahead_ratio%) thrashing threshold - readahead_hit_rate = 1 i.e. read-ahead hit ratio >=(1/readahead_hit_rate) is deemed ok readahead_ratio also provides a way to select read-ahead logic at runtime: condition action ========================================================================== readahead_ratio == 0 disable read-ahead readahead_ratio <= 9 select the (old) stock read-ahead logic readahead_ratio >= 10 select the (new) adaptive read-ahead logic Signed-off-by: Wu Fengguang <wfg@xxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- Documentation/sysctl/vm.txt | 37 ++++++++++++++++++++++++++++++++++ include/linux/sysctl.h | 2 + kernel/sysctl.c | 28 +++++++++++++++++++++++++ mm/readahead.c | 17 +++++++++++++++ 4 files changed, 84 insertions(+) diff -puN Documentation/sysctl/vm.txt~readahead-sysctl-parameters Documentation/sysctl/vm.txt --- 25/Documentation/sysctl/vm.txt~readahead-sysctl-parameters Wed May 24 16:49:25 2006 +++ 25-akpm/Documentation/sysctl/vm.txt Wed May 24 16:49:25 2006 @@ -31,6 +31,8 @@ Currently, these files are in /proc/sys/ - zone_reclaim_interval - panic_on_oom - swap_prefetch +- readahead_ratio +- readahead_hit_rate ============================================================== @@ -202,3 +204,38 @@ copying back pages from swap into the sw practice it can take many minutes before the vm is idle enough. The default value is 1. + +============================================================== + +readahead_ratio + +This limits readahead size to percent of the thrashing threshold. +The thrashing threshold is dynamicly estimated from the _history_ read +speed and system load, to deduce the _future_ readahead request size. + +Set it to a smaller value if you have not enough memory for all the +concurrent readers, or the I/O loads fluctuate a lot. But if there's +plenty of memory(>2MB per reader), a bigger value may help performance. + +readahead_ratio also selects the readahead logic: + VALUE CODE PATH + ------------------------------------------- + 0 disable readahead totally + 1-9 select the stock readahead logic + 10-inf select the adaptive readahead logic + +The default value is 50. Reasonable values would be [50, 100]. + +============================================================== + +readahead_hit_rate + +This is the max allowed value of (readahead-pages : accessed-pages). +Useful only when (readahead_ratio >= 10). If the previous readahead +request has bad hit rate, the kernel will be reluctant to do the next +readahead. + +Larger values help catch more sparse access patterns. Be aware that +readahead of the sparse patterns sacrifices memory for speed. + +The default value is 1. It is recommended to keep the value below 16. diff -puN include/linux/sysctl.h~readahead-sysctl-parameters include/linux/sysctl.h --- 25/include/linux/sysctl.h~readahead-sysctl-parameters Wed May 24 16:49:25 2006 +++ 25-akpm/include/linux/sysctl.h Wed May 24 16:49:25 2006 @@ -194,6 +194,8 @@ enum VM_PANIC_ON_OOM=33, /* panic at out-of-memory */ VM_VDSO_ENABLED=34, /* map VDSO into new processes? */ VM_SWAP_PREFETCH=35, /* swap prefetch */ + VM_READAHEAD_RATIO=36, /* percent of read-ahead size to thrashing-threshold */ + VM_READAHEAD_HIT_RATE=37, /* one accessed page legitimizes so many read-ahead pages */ }; /* CTL_NET names: */ diff -puN kernel/sysctl.c~readahead-sysctl-parameters kernel/sysctl.c --- 25/kernel/sysctl.c~readahead-sysctl-parameters Wed May 24 16:49:25 2006 +++ 25-akpm/kernel/sysctl.c Wed May 24 16:49:25 2006 @@ -76,6 +76,12 @@ extern int sysctl_drop_caches; extern int percpu_pagelist_fraction; extern int compat_log; +#if defined(CONFIG_ADAPTIVE_READAHEAD) +extern int readahead_ratio; +extern int readahead_hit_rate; +static int one = 1; +#endif + #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86) int unknown_nmi_panic; int nmi_watchdog_enabled; @@ -1044,6 +1050,28 @@ static ctl_table vm_table[] = { .proc_handler = &proc_dointvec, }, #endif +#ifdef CONFIG_ADAPTIVE_READAHEAD + { + .ctl_name = VM_READAHEAD_RATIO, + .procname = "readahead_ratio", + .data = &readahead_ratio, + .maxlen = sizeof(readahead_ratio), + .mode = 0644, + .proc_handler = &proc_dointvec, + .strategy = &sysctl_intvec, + .extra1 = &zero, + }, + { + .ctl_name = VM_READAHEAD_HIT_RATE, + .procname = "readahead_hit_rate", + .data = &readahead_hit_rate, + .maxlen = sizeof(readahead_hit_rate), + .mode = 0644, + .proc_handler = &proc_dointvec, + .strategy = &sysctl_intvec, + .extra1 = &one, + }, +#endif { .ctl_name = 0 } }; diff -puN mm/readahead.c~readahead-sysctl-parameters mm/readahead.c --- 25/mm/readahead.c~readahead-sysctl-parameters Wed May 24 16:49:25 2006 +++ 25-akpm/mm/readahead.c Wed May 24 16:49:25 2006 @@ -20,6 +20,23 @@ #include <linux/nfsd/const.h> /* + * Adaptive read-ahead parameters. + */ + +/* In laptop mode, poll delayed look-ahead on every ## pages read. */ +#define LAPTOP_POLL_INTERVAL 16 + +/* Set look-ahead size to 1/# of the thrashing-threshold. */ +#define LOOKAHEAD_RATIO 8 + +/* Set read-ahead size to ##% of the thrashing-threshold. */ +int readahead_ratio = 50; +EXPORT_SYMBOL_GPL(readahead_ratio); + +/* Readahead as long as cache hit ratio keeps above 1/##. */ +int readahead_hit_rate = 1; + +/* * Detailed classification of read-ahead behaviors. */ #define RA_CLASS_SHIFT 4 _ Patches currently in -mm which might be from wfg@xxxxxxxxxxxxxxxx are readahead-kconfig-options.patch radixtree-look-aside-cache.patch radixtree-hole-scanning-functions.patch readahead-page-flag-pg_readahead.patch readahead-refactor-do_generic_mapping_read.patch readahead-refactor-__do_page_cache_readahead.patch readahead-insert-cond_resched-calls.patch readahead-common-macros.patch readahead-events-accounting.patch readahead-support-functions.patch readahead-sysctl-parameters.patch readahead-min-max-sizes.patch readahead-state-based-method-aging-accounting.patch readahead-state-based-method-data-structure.patch readahead-state-based-method-routines.patch readahead-state-based-method.patch readahead-context-based-method.patch readahead-initial-method-guiding-sizes.patch readahead-initial-method-thrashing-guard-size.patch readahead-initial-method-expected-read-size.patch readahead-initial-method-user-recommended-size.patch readahead-initial-method.patch readahead-backward-prefetching-method.patch readahead-seeking-reads-method.patch readahead-thrashing-recovery-method.patch readahead-call-scheme.patch readahead-laptop-mode.patch readahead-loop-case.patch readahead-nfsd-case.patch readahead-turn-on-by-default.patch readahead-debug-radix-tree-new-functions.patch readahead-debug-traces-showing-accessed-file-names.patch readahead-debug-traces-showing-read-patterns.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html