Wu Fengguang подготовил (http://kerneltrap.org/node/6642) серию патчей для
Linux ядра, в которых реализована более гибкая и экономная с точки зрения
расхода памяти, относительно текущей реализации, возможность упреждающего
чтения содержимого файлов (для часто запрашиваемых файлов, блоки данных
читаются в буфер еще до того как программа реально запросит их).
В тестах, при использовании патча было зафиксировано увеличение скорости работы
PostgreSQL примерно на 8%. Для некоторых приложений выигрыш доходил до 30%.
www.opennet.ru
-------------------------------------------------------------------------------
Linux: Adaptive Readahead
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/> :)
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.
С уважением. Anton aka Stalker
np: silence ( Winamp ушел в Партизаны ;-)
Linux Registered User #386476
[#*TEAM:*#] [#_Злой СисОп_#] [*Heavy Metal!*] [*_Усачи_*]