login
Header Space

 
 

Linux: Adaptive Readahead

May 26, 2006 - 10:44am
Submitted by Jeremy on May 26, 2006 - 10:44am.
Linux news

Wu Fengguang has been maintaining an adaptive readahead patchset for the Linux kernel. One of the patches from the set includes a kconfig option to enable/disable the read-ahead logic explaining:

"Readahead is a technique employed by the kernel in an attempt to improve file reading performance. If the kernel has reason to believe that a particular file is being read sequentially, it will attempt to read blocks from the file into memory before the application requests them. When readahead works, it speeds up the system's throughput, since the reading application does not have to wait for its requests. When readahead fails, instead, it generates useless I/O and occupies memory pages which are needed for some other purpose."

"The kernel already has a stock readahead logic that is well understood and well tuned. This option enables a more complex and feature rich one. It tries to be smart and memory efficient. However, due to the great diversity of real world applications, it might not fit everyone."

Included with the patches were some benchmarks showing an impressive performance boost with the PostgreSQL database, leading Andrew Morton [interview] to comment, "these are nice-looking numbers, but one wonders. If optimising readahead makes this much difference to postgresql performance then postgresql should be doing the readahead itself, rather than relying upon the kernel's ability to guess what the application will be doing in the future. Because surely the database can do a better job of that than the kernel." It was noted that PostgreSQL developers want to keep their code portable, much more difficult when implementing custom readahead logic for each OS. Supporters of the patch also pointed out that the gains were significant, at around 30%, and improve performance for far more than just PostgreSQL.


From: Wu Fengguang [email blocked]
To: Andrew Morton [email blocked]
Subject: [PATCH 00/33] Adaptive read-ahead V12
Date:	Wed, 24 May 2006 19:12:46 +0800

Andrew,

This is the 12th release of the adaptive readahead patchset.

It has received tests in a wide range of applications in the past
six months, and polished up considerably.

Please consider it for inclusion in -mm tree.


Performance benefits
====================

Besides file servers and desktops, it is recently found to benefit
postgresql databases a lot.

I explained to pgsql users how the patch may help their db performance:
http://archives.postgresql.org/pgsql-performance/2006-04/msg00491.php
[QUOTE]
	HOW IT WORKS

	In adaptive readahead, the context based method may be of particular
	interest to postgresql users. It works by peeking into the file cache
	and check if there are any history pages present or accessed. In this
	way it can detect almost all forms of sequential / semi-sequential read
	patterns, e.g.
		- parallel / interleaved sequential scans on one file
		- sequential reads across file open/close
		- mixed sequential / random accesses
		- sparse / skimming sequential read

	It also have methods to detect some less common cases:
		- reading backward
		- seeking all over reading N pages

	WAYS TO BENEFIT FROM IT

	As we know, postgresql relies on the kernel to do proper readahead.
	The adaptive readahead might help performance in the following cases:
		- concurrent sequential scans
		- sequential scan on a fragmented table
		  (some DBs suffer from this problem, not sure for pgsql)
		- index scan with clustered matches
		- index scan on majority rows (in case the planner goes wrong)

And received positive responses:
[QUOTE from Michael Stone]
	I've got one DB where the VACUUM ANALYZE generally takes 11M-12M ms;
	with the patch the job took 1.7M ms. Another VACUUM that normally takes
	between 300k-500k ms took 150k. Definately a promising addition.

[QUOTE from Michael Stone]
	>I'm thinking about it, we're already using a fixed read-ahead of 16MB
	>using blockdev on the stock Redhat 2.6.9 kernel, it would be nice to
	>not have to set this so we may try it.

	FWIW, I never saw much performance difference from doing that. Wu's
	patch, OTOH, gave a big boost.

[QUOTE: odbc-bench with Postgresql 7.4.11 on dual Opteron]
	Base kernel:
	 Transactions per second:                92.384758
	 Transactions per second:                99.800896

	After read-ahvm.readahead_ratio = 100:
	 Transactions per second:                105.461952
	 Transactions per second:                105.458664

	vm.readahead_ratio = 100 ; vm.readahead_hit_rate = 1:
	 Transactions per second:                113.055367
	 Transactions per second:                124.815910


Patches
=======
All 33 patches are bisect friendly:
special cares have been taken to make them compile cleanly on each step.

The following 29 patches are only logically seperated -
one should not remove one of them and expect others to compile cleanly:

[patch 01/33] readahead: kconfig options
[patch 02/33] radixtree: look-aside cache
[patch 03/33] radixtree: hole scanning functions
[patch 04/33] readahead: page flag PG_readahead
[patch 05/33] readahead: refactor do_generic_mapping_read()
[patch 06/33] readahead: refactor __do_page_cache_readahead()
[patch 07/33] readahead: insert cond_resched() calls
[patch 08/33] readahead: common macros
[patch 09/33] readahead: events accounting
[patch 10/33] readahead: support functions
[patch 11/33] readahead: sysctl parameters
[patch 12/33] readahead: min/max sizes
[patch 13/33] readahead: state based method - aging accounting
[patch 14/33] readahead: state based method - data structure
[patch 15/33] readahead: state based method - routines
[patch 16/33] readahead: state based method
[patch 17/33] readahead: context based method
[patch 18/33] readahead: initial method - guiding sizes
[patch 19/33] readahead: initial method - thrashing guard size
[patch 20/33] readahead: initial method - expected read size
[patch 21/33] readahead: initial method - user recommended size
[patch 22/33] readahead: initial method
[patch 23/33] readahead: backward prefetching method
[patch 24/33] readahead: seeking reads method
[patch 25/33] readahead: thrashing recovery method
[patch 26/33] readahead: call scheme
[patch 27/33] readahead: laptop mode
[patch 28/33] readahead: loop case
[patch 29/33] readahead: nfsd case

The following 4 patches are for debugging purpose, and for -mm only:

[patch 30/33] readahead: turn on by default
[patch 31/33] readahead: debug radix tree new functions
[patch 32/33] readahead: debug traces showing accessed file names
[patch 33/33] readahead: debug traces showing read patterns


Diffstat
========
 Documentation/sysctl/vm.txt |   37 
 block/ll_rw_blk.c           |   34 
 drivers/block/loop.c        |    6 
 fs/file_table.c             |    7 
 fs/mpage.c                  |    4 
 fs/nfsd/vfs.c               |    5 
 include/linux/backing-dev.h |    3 
 include/linux/fs.h          |   57 +
 include/linux/mm.h          |   31 
 include/linux/mmzone.h      |    5 
 include/linux/page-flags.h  |    5 
 include/linux/radix-tree.h  |   87 ++
 include/linux/sysctl.h      |    2 
 include/linux/writeback.h   |    6 
 kernel/sysctl.c             |   28 
 lib/radix-tree.c            |  202 ++++-
 mm/Kconfig                  |   62 +
 mm/filemap.c                |   90 ++
 mm/page-writeback.c         |    2 
 mm/page_alloc.c             |    2 
 mm/readahead.c              | 1641 +++++++++++++++++++++++++++++++++++++++++++-
 mm/swap.c                   |    2 
 mm/vmscan.c                 |    4 
 23 files changed, 2262 insertions(+), 60 deletions(-)


Changelog
=========

V12  2006-05-24
- improve small files case
- allow pausing of events accounting
- disable sparse read-ahead by default
- a bug fix in radix_tree_cache_lookup_parent()
- more cleanups

V11  2006-03-19
- patchset rework
- add kconfig option to make the feature compile-time selectable
- improve radix tree scan functions
- fix bug of using smp_processor_id() in preemptible code
- avoid overflow in compute_thrashing_threshold()
- disable sparse read prefetching if (readahead_hit_rate == 1)
- make thrashing recovery a standalone function
- random cleanups

V10  2005-12-16
- remove delayed page activation
- remove live page protection
- revert mmap readaround to old behavior
- default to original readahead logic
- default to original readahead size
- merge comment fixes from Andreas Mohr
- merge radixtree cleanups from Christoph Lameter
- reduce sizeof(struct file_ra_state) by unnamed union
- stateful method cleanups
- account other read-ahead paths

V9  2005-12-3
- standalone mmap read-around code, a little more smart and tunable
- make stateful method sensible of request size
- decouple readahead_ratio from live pages protection
- let readahead_ratio contribute to ra_size grow speed in stateful method
- account variance of ra_size

V8  2005-11-25

- balance zone aging only in page relaim paths and do it right
- do the aging of slabs in the same way as zones
- add debug code to dump the detailed page reclaim steps
- undo exposing of struct radix_tree_node and uninline related functions
- work better with nfsd
- generalize accelerated context based read-ahead
- account smooth read-ahead aging based on page referenced/activate bits
- avoid divide error in compute_thrashing_threshold()
- more low lantency efforts
- update some comments
- rebase debug actions on debugfs entries instead of magic readahead_ratio values

V7  2005-11-09

- new tunable parameters: readahead_hit_rate/readahead_live_chunk
- support sparse sequential accesses
- delay look-ahead if drive is spinned down in laptop mode
- disable look-ahead for loopback file
- make mandatory thrashing protection more simple and robust
- attempt to improve responsiveness on large read-ahead size

V6  2005-11-01

- cancel look-ahead in laptop mode
- increase read-ahead limit to 0xFFFF pages

V5  2005-10-28

- rewrite context based method to make it clean and robust
- improved accuracy of stateful thrashing threshold estimation
- make page aging equal to the number of code pages scanned
- sort out the thrashing protection logic
- enhanced debug/accounting facilities

V4  2005-10-15

- detect and save live chunks on page reclaim
- support database workload
- support reading backward
- radix tree lookup look-aside cache

V3  2005-10-06

- major code reorganization and documention
- stateful estimation of thrashing-threshold
- context method with accelerated grow up phase
- adaptive look-ahead
- early detection and rescue of pages in danger
- statitics data collection
- synchronized page aging between zones

V2  2005-09-15

- delayed page activation
- look-ahead: towards pipelined read-ahead

V1  2005-09-13

Initial release which features:
        o stateless (for now)
        o adapts to available memory / read speed
        o free of thrashing (in theory)

And handles:
        o large number of slow streams (FTP server)
	o open/read/close access patterns (NFS server)
        o multiple interleaved, sequential streams in one file
	  (multithread / multimedia / database)

Cheers,
Wu Fengguang
--
Dept. Automation                University of Science and Technology of China


From: Andrew Morton [email blocked] Subject: Re: [PATCH 00/33] Adaptive read-ahead V12 Date: Thu, 25 May 2006 08:44:15 -0700 Wu Fengguang [email blocked] wrote: > > Andrew, > > This is the 12th release of the adaptive readahead patchset. > > It has received tests in a wide range of applications in the past > six months, and polished up considerably. > > Please consider it for inclusion in -mm tree. > > > Performance benefits > ==================== > > Besides file servers and desktops, it is recently found to benefit > postgresql databases a lot. > > I explained to pgsql users how the patch may help their db performance: > http://archives.postgresql.org/pgsql-performance/2006-04/msg00491.php > [QUOTE] > HOW IT WORKS > > In adaptive readahead, the context based method may be of particular > interest to postgresql users. It works by peeking into the file cache > and check if there are any history pages present or accessed. In this > way it can detect almost all forms of sequential / semi-sequential read > patterns, e.g. > - parallel / interleaved sequential scans on one file > - sequential reads across file open/close > - mixed sequential / random accesses > - sparse / skimming sequential read > > It also have methods to detect some less common cases: > - reading backward > - seeking all over reading N pages > > WAYS TO BENEFIT FROM IT > > As we know, postgresql relies on the kernel to do proper readahead. > The adaptive readahead might help performance in the following cases: > - concurrent sequential scans > - sequential scan on a fragmented table > (some DBs suffer from this problem, not sure for pgsql) > - index scan with clustered matches > - index scan on majority rows (in case the planner goes wrong) > > And received positive responses: > [QUOTE from Michael Stone] > I've got one DB where the VACUUM ANALYZE generally takes 11M-12M ms; > with the patch the job took 1.7M ms. Another VACUUM that normally takes > between 300k-500k ms took 150k. Definately a promising addition. > > [QUOTE from Michael Stone] > >I'm thinking about it, we're already using a fixed read-ahead of 16MB > >using blockdev on the stock Redhat 2.6.9 kernel, it would be nice to > >not have to set this so we may try it. > > FWIW, I never saw much performance difference from doing that. Wu's > patch, OTOH, gave a big boost. > > [QUOTE: odbc-bench with Postgresql 7.4.11 on dual Opteron] > Base kernel: > Transactions per second: 92.384758 > Transactions per second: 99.800896 > > After read-ahvm.readahead_ratio = 100: > Transactions per second: 105.461952 > Transactions per second: 105.458664 > > vm.readahead_ratio = 100 ; vm.readahead_hit_rate = 1: > Transactions per second: 113.055367 > Transactions per second: 124.815910 These are nice-looking numbers, but one wonders. If optimising readahead makes this much difference to postgresql performance then postgresql should be doing the readahead itself, rather than relying upon the kernel's ability to guess what the application will be doing in the future. Because surely the database can do a better job of that than the kernel. That would involve using posix_fadvise(POSIX_FADV_RANDOM) to disable kernel readahead and then using posix_fadvise(POSIX_FADV_WILLNEED) to launch application-level readahead. Has this been considered or attempted?
From: Wu Fengguang [email blocked] Subject: Re: [PATCH 00/33] Adaptive read-ahead V12 Date: Fri, 26 May 2006 09:19:39 +0800 On Thu, May 25, 2006 at 08:44:15AM -0700, Andrew Morton wrote: > These are nice-looking numbers, but one wonders. If optimising readahead > makes this much difference to postgresql performance then postgresql should > be doing the readahead itself, rather than relying upon the kernel's > ability to guess what the application will be doing in the future. Because > surely the database can do a better job of that than the kernel. > > That would involve using posix_fadvise(POSIX_FADV_RANDOM) to disable kernel > readahead and then using posix_fadvise(POSIX_FADV_WILLNEED) to launch > application-level readahead. > > Has this been considered or attempted? There has been many lengthy debates in the postgresql mailing list, and it seems that there has been _strong_ resistance to it. IMHO, a best scheme would be - leave _obvious_ patterns to the kernel i.e. all kinds of (semi-)sequential reads - do fadvise() for _non-obvious_ patterns on _critical_ points i.e. the index scans Wu
From: Michael Stone [email blocked] Subject: Re: [PATCH 00/33] Adaptive read-ahead V12 Date: Thu, 25 May 2006 15:26:20 -0400 On Thu, May 25, 2006 at 08:44:15AM -0700, Andrew Morton wrote: >These are nice-looking numbers, but one wonders. If optimising readahead >makes this much difference to postgresql performance then postgresql should >be doing the readahead itself, rather than relying upon the kernel's >ability to guess what the application will be doing in the future. Because >surely the database can do a better job of that than the kernel. In this particular case Wu had asked about postgres numbers, so I reported some postgres numbers. You could probably get similar speedups out of postgres by implementing readahead in postgres. OTOH, the kernel patch also gives substantial speedups to thing like cp; the question comes down to whether it's better for every application to implement readahead or for the kernel to do it. (There are, of course, other concerns like maintainability or whether performance degrades in other cases, but I didn't test that. :) Mike Stone
From: David Lang [email blocked] Subject: Re: [PATCH 00/33] Adaptive read-ahead V12 Date: Thu, 25 May 2006 12:40:35 -0700 (PDT) On Thu, 25 May 2006, Andrew Morton wrote: > Wu Fengguang [email blocked] wrote: >> > > These are nice-looking numbers, but one wonders. If optimising readahead > makes this much difference to postgresql performance then postgresql should > be doing the readahead itself, rather than relying upon the kernel's > ability to guess what the application will be doing in the future. Because > surely the database can do a better job of that than the kernel. > > That would involve using posix_fadvise(POSIX_FADV_RANDOM) to disable kernel > readahead and then using posix_fadvise(POSIX_FADV_WILLNEED) to launch > application-level readahead. > > Has this been considered or attempted? Postgres chooses not to try and duplicate OS functionality in it's I/O routines. it doesn't try to determine where on disk the data is (other then splitting the data into multiple files and possibly spreading things between directories) it doesn't try to do it's own readahead. it _does_ maintain it's own journal, but depends on the OS to do the right thing when a fsync is issued on the files. yes it could be re-written to do all this itself, but the project has decided not to try and figure out the best options for all the different filesystems and OS's that it runs on and instead trust the OS developers to do reasonable things instead. besides, do you really want to have every program doing it's own readahead? David Lang
From: Andrew Morton [email blocked] Subject: Re: [PATCH 00/33] Adaptive read-ahead V12 Date: Thu, 25 May 2006 15:01:49 -0700 David Lang [email blocked] wrote: > > On Thu, 25 May 2006, Andrew Morton wrote: > > > Wu Fengguang [email blocked] wrote: > >> > > > > These are nice-looking numbers, but one wonders. If optimising readahead > > makes this much difference to postgresql performance then postgresql should > > be doing the readahead itself, rather than relying upon the kernel's > > ability to guess what the application will be doing in the future. Because > > surely the database can do a better job of that than the kernel. > > > > That would involve using posix_fadvise(POSIX_FADV_RANDOM) to disable kernel > > readahead and then using posix_fadvise(POSIX_FADV_WILLNEED) to launch > > application-level readahead. > > > > Has this been considered or attempted? > > Postgres chooses not to try and duplicate OS functionality in it's I/O > routines. > > it doesn't try to determine where on disk the data is (other then > splitting the data into multiple files and possibly spreading things > between directories) > > it doesn't try to do it's own readahead. > > it _does_ maintain it's own journal, but depends on the OS to do the right > thing when a fsync is issued on the files. > > yes it could be re-written to do all this itself, but the project has > decided not to try and figure out the best options for all the different > filesystems and OS's that it runs on and instead trust the OS developers > to do reasonable things instead. > > besides, do you really want to have every program doing it's own > readahead? > If the developers of that program want to squeeze the last 5% out of it then sure, I'd expect them to use such OS-provided I/O scheduling facilities. Database developers do that sort of thing all the time. We have an application which knows what it's doing sending IO requests to the kernel which must then try to reverse engineer what the application is doing via this rather inappropriate communication channel. Is that dumb, or what? Given that the application already knows what it's doing, it's in a much better position to issue the anticipatory IO requests than is the kernel.
From: David Lang [email blocked] Subject: Re: [PATCH 00/33] Adaptive read-ahead V12 Date: Thu, 25 May 2006 13:28:38 -0700 (PDT) > If the developers of that program want to squeeze the last 5% out of it > then sure, I'd expect them to use such OS-provided I/O scheduling > facilities. Database developers do that sort of thing all the time. > > We have an application which knows what it's doing sending IO requests to > the kernel which must then try to reverse engineer what the application is > doing via this rather inappropriate communication channel. > > Is that dumb, or what? > > Given that the application already knows what it's doing, it's in a much > better position to issue the anticipatory IO requests than is the kernel. if a program is trying to squeeze every last bit of performance out of a system then you are right, it should run on the bare hardware. however in reality many people are willing to sacrafice a little performance for maintainability, and portability. if Adaptive read-ahead was only useful for Postgres (and had a negative effect on everything else, even if it's just the added complication in the kernel) then I would agree that it should be in Postgres, not in the kernel. but I don't believe that this is the case, this patch series helps in a large number of workloads (including 'cp' according to some other posters), postgres was just used as the example in this subthread. gnome startup has some serious read-ahead issues from what I've heard, should it include an I/O scheduler as well (after all it knows what it's going to be doing, why should the kernel have to reverse-enginer it) David Lang
From: Michael Stone [email blocked] Subject: Re: [PATCH 00/33] Adaptive read-ahead V12 Date: Thu, 25 May 2006 20:48:16 -0400 On Thu, May 25, 2006 at 03:01:49PM -0700, Andrew Morton wrote: >If the developers of that program want to squeeze the last 5% out of it >then sure, I'd expect them to use such OS-provided I/O scheduling >facilities. Maybe, if we were talking about squeezing the last 5%. But all applications should be required to greatly complicate their IO routines for the last 30%? To reimplement something the kernel already does (at least to some degree), as opposed to making the kernel implementation better? "Is that dumb, or what?" :-) >Database developers do that sort of thing all the time. Even the oracle people seem to have figured out they were doing too much that's properly the responsibility of the OS and creating a maintenance and portability nightmare. Mike Stone

From: Wu Fengguang [email blocked] Subject: [PATCH 01/33] readahead: kconfig options Date: Wed, 24 May 2006 19:12:47 +0800 This patchset introduces a set of adaptive read-ahead methods. They enable the kernel to better support many important I/O applications. MAIN FEATURES ============= - Adaptive read-ahead buffer management - aggressive, thrashing safe read-ahead size - optimal memory utilisation while achieving good I/O throughput - unnecessary to hand tuning VM_MAX_READAHEAD - support slow/fast readers at the same time - support large number of concurrent readers - aggressive read-ahead on start-of-file - configurable recommended read-ahead size - safeguarded by dynamic estimated thrashing threshold - safeguarded by dynamic estimated expected read size - good for lots-of-small-files case - shrinkable look-ahead size - cut down up to 40% memory consumption on overloaded situation - Detecting any form of (semi-)sequencial scan - parallel / interleaved sequential scans on one fd - sequential reads across file open/close lifetime - mixed sequential / random accesses - sparse / skimming sequential read - Support more access patterns - backward prefetching - seeking around reading N pages - Better special case handling - nfs daemon support: the raparams cache is no longer required - laptop mode support: defer look-ahead on drive spinned down - loopback file support: avoid double look-ahead DESIGN STRATEGIES ================= - Dual methods design - stateful method: the fast and default one - stateless method: the robust and failsafe one - if anything abnormal happens, the stateful method bails out, the stateless method queries the page cache and possibly restart the read-ahead process - Robust feedback design - sense and handle important states so that the logic wont run away - detect danger of thrashing and prevent it in advance - extensive accounting and debugging traces This patch: Add kconfig options to enable/disable: - adaptive read-ahead logic - adaptive read-ahead debug traces and events accounting The read-ahead introduction text is cited from the well written LWN article "Adaptive file readahead" <http://lwn.net/Articles/155510/&gt; :) Signed-off-by: Wu Fengguang [email blocked] --- mm/Kconfig | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 57 insertions(+) --- linux-2.6.17-rc4-mm3.orig/mm/Kconfig +++ linux-2.6.17-rc4-mm3/mm/Kconfig @@ -146,3 +146,60 @@ config MIGRATION while the virtual addresses are not changed. This is useful for example on NUMA systems to put pages nearer to the processors accessing the page. + +# +# Adaptive file readahead +# +config ADAPTIVE_READAHEAD + bool "Adaptive file readahead (EXPERIMENTAL)" + default n + depends on EXPERIMENTAL + help + Readahead is a technique employed by the kernel in an attempt + to improve file reading performance. If the kernel has reason + to believe that a particular file is being read sequentially, + it will attempt to read blocks from the file into memory before + the application requests them. When readahead works, it speeds + up the system's throughput, since the reading application does + not have to wait for its requests. When readahead fails, instead, + it generates useless I/O and occupies memory pages which are + needed for some other purpose. + + The kernel already has a stock readahead logic that is well + understood and well tuned. This option enables a more complex and + feature rich one. It tries to be smart and memory efficient. + However, due to the great diversity of real world applications, it + might not fit everyone. + + Please refer to Documentation/sysctl/vm.txt for tunable parameters. + + It is known to work well for many desktops, file servers and + postgresql databases. Say Y to try it out for yourself. + +config DEBUG_READAHEAD + bool "Readahead debug and accounting" + default y + depends on ADAPTIVE_READAHEAD + select DEBUG_FS + help + This option injects extra code to dump detailed debug traces and do + readahead events accounting. + + To actually get the data: + + mkdir /debug + mount -t debug none /debug + + After that you can do the following: + + echo > /debug/readahead/events # reset the counters + cat /debug/readahead/events # check the counters + + echo 1 > /debug/readahead/debug_level # start events accounting + echo 0 > /debug/readahead/debug_level # pause events accounting + + echo 2 > /debug/readahead/debug_level # show printk traces + echo 3 > /debug/readahead/debug_level # show printk traces(verbose) + echo 1 > /debug/readahead/debug_level # stop filling my kern.log + + Say N for production servers.



Related Links:

mysql

May 26, 2006 - 3:08pm
Anonymous (not verified)

Sounds interesting, wonder if anyone has taken the time to benchmark mysql for possible benefit?

Just thinking the same thing

May 27, 2006 - 5:48pm
Anonymous (not verified)

Just thinking the same thing as I read it.... I have a multi-GB MySQL setup where I on startup do "cat *.MYI *.MYD >/dev/null" to force as much as possible into the buffer cache. That works great since we have more RAM than the DB takes at the moment, but it won't work great as the DB increases.... Improving the readahead could make a huge difference...

PostgreSQL definitely benefits

May 29, 2006 - 12:04pm

Simple test case reveals that PostgreSQL is really able to pull data in memory much faster when the kernel it is running on is patched with the adaptive readahead patchset. The graph is interesting.

Morton is right

June 12, 2006 - 10:32pm

That's what the vertically structured kernels try to do.

I disagree with Andrew Morton

September 13, 2006 - 1:29pm
Anonymous (not verified)

I disagree with Andrew Morton somewhat, too. The problem here is that this prefetch thing is generic AND specific to each application. If it can be done generically, it keeps specific apps clean and provides improvements to all other apps in a seamless way.

Example: mencoder has a bad file buffering mechanism. avidemux2 does not do prefetching, too -- it would probably much simpler to do the prefetching there on the block or file level because of the interleaved structure of AVI files... maybe one should add pre-fetch arguments to the standard glibc file read methods?

Question to the author

September 13, 2006 - 1:47pm
Anonymous (not verified)

At which level does this operate? If it operates at the block level, you could possibly think about re-locating blocks according to "popular" access sequences.

ARA in Debian

May 25, 2007 - 12:45pm
Andy Davidson (not verified)

I have built an Adaptive Readahead kernel package for Debian users, strongly based on and feature compatible with the kernel which ships with Debian Etch (other than it has ARA turned on!). Looking for feedback from anyone who has tried this in production.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
speck-geostationary