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>,
Neil Brown <neilb@cse.unsw.edu.au>
Subject: [PATCH 29/33] readahead: nfsd case
Date: Wed, 24 May 2006 19:13:15 +0800 [thread overview]
Message-ID: <348469550.86015@ustc.edu.cn> (raw)
Message-ID: <20060524111911.607080495@localhost.localdomain> (raw)
In-Reply-To: 20060524111246.420010595@localhost.localdomain
[-- Attachment #1: readahead-nfsd-case.patch --]
[-- Type: text/plain, Size: 4646 bytes --]
Bypass nfsd raparms cache -- the new logic do not rely on it.
--------------------------------
For the case of NFS service, the new read-ahead logic
+ can handle disordered nfsd requests
+ can handle concurrent sequential requests on large files
with the help of look-ahead
- will have much ado about the concurrent ones on small files
--------------------------------
Notes about the concurrent nfsd requests issue:
nfsd read requests can be out of order, concurrent and with no ra-state info.
They are handled by the context based read-ahead method, which does the job
in the following steps:
1. scan in page cache
2. make read-ahead decisions
3. alloc new pages
4. insert new pages to page cache
A single read-ahead chunk in the client side will be dissembled and serviced
by many concurrent nfsd in the server side. It is highly possible for two or
more of these parallel nfsd instances to be in step 1/2/3 at the same time.
Without knowing others working on the same file region, they will issue
overlapped read-ahead requests, which lead to many conflicts at step 4.
There's no much luck to eliminate the concurrent problem in general and
efficient ways. But experiments show that mount with tcp,rsize=32768 can
cut down the overhead a lot.
--------------------------------
Here are the benchmark outputs. The test cases cover
- small/big files
- small/big rsize mount option
- serialized/parallel nfsd processing
`serialized' means running the following command to enforce serialized
nfsd requests processing:
# for pid in `pidof nfsd`; do taskset -p 1 $pid; done
8 nfsd; local mount with tcp,rsize=8192
=======================================
SERIALIZED, SMALL FILES
readahead_ratio = 0, ra_max = 128kb (old logic, the ra_max is not quite relevant)
96.51s real 11.32s system 3.27s user 160334+2829 cs diff -r $NFSDIR $NFSDIR2
readahead_ratio = 70, ra_max = 1024kb (new read-ahead logic)
94.88s real 11.53s system 3.20s user 152415+3777 cs diff -r $NFSDIR $NFSDIR2
SERIALIZED, BIG FILES
readahead_ratio = 0, ra_max = 128kb
56.52s real 3.38s system 1.23s user 47930+5256 cs diff $NFSFILE $NFSFILE2
readahead_ratio = 70, ra_max = 1024kb
32.54s real 5.71s system 1.38s user 23851+17007 cs diff $NFSFILE $NFSFILE2
PARALLEL, SMALL FILES
readahead_ratio = 0, ra_max = 128kb
99.87s real 11.41s system 3.15s user 173945+9163 cs diff -r $NFSDIR $NFSDIR2
readahead_ratio = 70, ra_max = 1024kb
100.14s real 12.06s system 3.16s user 170865+13406 cs diff -r $NFSDIR $NFSDIR2
PARALLEL, BIG FILES
readahead_ratio = 0, ra_max = 128kb
63.35s real 5.68s system 1.57s user 82594+48747 cs diff $NFSFILE $NFSFILE2
readahead_ratio = 70, ra_max = 1024kb
33.87s real 10.17s system 1.55s user 72291+100079 cs diff $NFSFILE $NFSFILE2
8 nfsd; local mount with tcp,rsize=32768
========================================
Note that the normal data are now much better, and come close to that of the
serialized ones.
PARALLEL/NORMAL
readahead_ratio = 8, ra_max = 1024kb (old logic)
48.36s real 2.22s system 1.51s user 7209+4110 cs diff $NFSFILE $NFSFILE2
readahead_ratio = 70, ra_max = 1024kb (new logic)
30.04s real 2.46s system 1.33s user 5420+2492 cs diff $NFSFILE $NFSFILE2
readahead_ratio = 8, ra_max = 1024kb
92.99s real 10.32s system 3.23s user 145004+1826 cs diff -r $NFSDIR $NFSDIR2 > /dev/null
readahead_ratio = 70, ra_max = 1024kb
90.96s real 10.68s system 3.22s user 144414+2520 cs diff -r $NFSDIR $NFSDIR2 > /dev/null
SERIALIZED
readahead_ratio = 8, ra_max = 1024kb
47.58s real 2.10s system 1.27s user 7933+1357 cs diff $NFSFILE $NFSFILE2
readahead_ratio = 70, ra_max = 1024kb
29.46s real 2.41s system 1.38s user 5590+2613 cs diff $NFSFILE $NFSFILE2
readahead_ratio = 8, ra_max = 1024kb
93.02s real 10.67s system 3.25s user 144850+2286 cs diff -r $NFSDIR $NFSDIR2 > /dev/null
readahead_ratio = 70, ra_max = 1024kb
91.15s real 11.04s system 3.31s user 144432+2814 cs diff -r $NFSDIR $NFSDIR2 > /dev/null
Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
---
Greg Banks gives a valuable recommend on the test cases, which helps me to
get the more complete picture. Thanks!
fs/nfsd/vfs.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletion(-)
--- linux-2.6.17-rc4-mm3.orig/fs/nfsd/vfs.c
+++ linux-2.6.17-rc4-mm3/fs/nfsd/vfs.c
@@ -829,7 +829,10 @@ nfsd_vfs_read(struct svc_rqst *rqstp, st
#endif
/* Get readahead parameters */
- ra = nfsd_get_raparms(inode->i_sb->s_dev, inode->i_ino);
+ if (prefer_adaptive_readahead())
+ ra = NULL;
+ else
+ ra = nfsd_get_raparms(inode->i_sb->s_dev, inode->i_ino);
if (ra && ra->p_set)
file->f_ra = ra->p_ra;
--
next prev parent reply other threads:[~2006-05-24 11:19 UTC|newest]
Thread overview: 108+ 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] ` <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 ` [PATCH 09/33] readahead: events accounting Wu Fengguang
2006-05-25 16:36 ` 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 ` Wu Fengguang [this message]
[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
[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] <20060526113906.084341801@localhost.localdomain>
[not found] ` <20060526115316.335626686@localhost.localdomain>
2006-05-26 11:39 ` [PATCH 29/33] readahead: nfsd case 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=348469550.86015@ustc.edu.cn \
--to=wfg@mail.ustc.edu.cn \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neilb@cse.unsw.edu.au \
/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