linux/fs/nfs
Bryan Schumaker 82f2e5472e NFS: Readdir plus in v4
By requsting more attributes during a readdir, we can mimic the readdir plus
operation that was in NFSv3.

To test, I ran the command `ls -lU --color=none` on directories with various
numbers of files.  Without readdir plus, I see this:

n files |    100    |   1,000   |  10,000   |  100,000  | 1,000,000
--------+-----------+-----------+-----------+-----------+----------
real    | 0m00.153s | 0m00.589s | 0m05.601s | 0m56.691s | 9m59.128s
user    | 0m00.007s | 0m00.007s | 0m00.077s | 0m00.703s | 0m06.800s
sys     | 0m00.010s | 0m00.070s | 0m00.633s | 0m06.423s | 1m10.005s
access  | 3         | 1         | 1         | 4         | 31
getattr | 2         | 1         | 1         | 1         | 1
lookup  | 104       | 1,003     | 10,003    | 100,003   | 1,000,003
readdir | 2         | 16        | 158       | 1,575     | 15,749
total   | 111       | 1,021     | 10,163    | 101,583   | 1,015,784

With readdir plus enabled, I see this:

n files |    100    |   1,000   |  10,000   |  100,000  | 1,000,000
--------+-----------+-----------+-----------+-----------+----------
real    | 0m00.115s | 0m00.206s | 0m01.079s | 0m12.521s | 2m07.528s
user    | 0m00.003s | 0m00.003s | 0m00.040s | 0m00.290s | 0m03.296s
sys     | 0m00.007s | 0m00.020s | 0m00.120s | 0m01.357s | 0m17.556s
access  | 3         | 1         | 1         | 1         | 7
getattr | 2         | 1         | 1         | 1         | 1
lookup  | 4         | 3         | 3         | 3         | 3
readdir | 6         | 62        | 630       | 6,300     | 62,993
total   | 15        | 67        | 635       | 6,305     | 63,004

Readdir plus disabled has about a 16x increase in the number of rpc calls and
is 4 - 5 times slower on large directories.

Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2010-10-23 15:27:37 -04:00
..
cache_lib.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
cache_lib.h NFS: Add a dns resolver for use with NFSv4 referrals and migration 2009-08-19 18:22:15 -04:00
callback.c param: use ops in struct kernel_param, rather than get and set fns directly 2010-08-11 23:04:13 +09:30
callback.h nfs41: implement cb_recall_slot 2010-02-10 08:30:59 -05:00
callback_proc.c NFS: Fix the locking in nfs4_callback_getattr 2010-08-06 13:41:39 -04:00
callback_xdr.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
client.c NFS: Readdir plus in v4 2010-10-23 15:27:37 -04:00
delegation.c NFS: Clean up the callers of nfs_wb_all() 2010-08-03 22:06:40 -04:00
delegation.h NFSv41: Fix nfs_async_inode_return_delegation() ugliness 2010-06-22 13:24:02 -04:00
dir.c NFS: Readdir plus in v4 2010-10-23 15:27:37 -04:00
direct.c NFSv4: Ensure that we track the NFSv4 lock state in read/write requests. 2010-07-30 14:41:56 -04:00
dns_resolve.c NFS: Use kernel DNS resolver [ver #2] 2010-08-11 17:11:28 +00:00
dns_resolve.h NFS: Use kernel DNS resolver [ver #2] 2010-08-11 17:11:28 +00:00
file.c NFS: Don't SIGBUS if nfs_vm_page_mkwrite races with a cache invalidation 2010-10-19 19:37:54 -04:00
fscache-index.c NFS: Add read context retention for FS-Cache to call back with 2009-04-03 16:42:44 +01:00
fscache.c NFS: Squelch compiler warning 2010-05-14 15:09:31 -04:00
fscache.h NFS: Propagate 'fsc' mount option through automounts 2009-09-23 14:36:39 -04:00
getroot.c nfs4 use mandatory attribute file type in nfs4_get_root 2010-06-22 13:17:43 -04:00
idmap.c NFS: new idmapper 2010-10-07 18:48:49 -04:00
inode.c NFS: remove readdir plus limit 2010-10-23 15:27:32 -04:00
internal.h NFS: Readdir plus in v4 2010-10-23 15:27:37 -04:00
iostat.h NFS: Squelch compiler warning in nfs_add_server_stats() 2010-05-14 15:09:31 -04:00
Kconfig NFS: new idmapper 2010-10-07 18:48:49 -04:00
Makefile NFS: Add a dns resolver for use with NFSv4 referrals and migration 2009-08-19 18:22:15 -04:00
mount_clnt.c NFS: Remove \t from mount debugging message 2010-09-17 10:54:37 -04:00
namespace.c NFS: Reduce the stack footprint of nfs_follow_mountpoint() 2010-05-14 15:09:22 -04:00
nfs2xdr.c NFS: Readdir plus in v4 2010-10-23 15:27:37 -04:00
nfs3acl.c NFS: Reduce stack footprint of nfs3_proc_getacl() and nfs3_proc_setacl() 2010-05-14 15:09:28 -04:00
nfs3proc.c NFS: readdir with vmapped pages 2010-10-23 15:27:35 -04:00
nfs3xdr.c NFS: Readdir plus in v4 2010-10-23 15:27:37 -04:00
nfs4_fs.h NFS: Readdir plus in v4 2010-10-23 15:27:37 -04:00
nfs4namespace.c NFSv4: Fix up the documentation for nfs_do_refmount 2010-05-14 15:09:29 -04:00
nfs4proc.c NFS: Readdir plus in v4 2010-10-23 15:27:37 -04:00
nfs4renewd.c NFSv41: Convert the various reboot recovery ops etc to minor version ops 2010-06-22 13:24:02 -04:00
nfs4state.c nfs: include ratelimit.h, fix nfs4state build error 2010-10-23 15:27:29 -04:00
nfs4xdr.c NFS: Readdir plus in v4 2010-10-23 15:27:37 -04:00
nfsroot.c NFS: Allow NFSROOT debugging messages to be enabled dynamically 2010-09-17 10:54:37 -04:00
pagelist.c NFSv4: Ensure that we track the NFSv4 lock state in read/write requests. 2010-07-30 14:41:56 -04:00
proc.c NFS: readdir with vmapped pages 2010-10-23 15:27:35 -04:00
read.c NFSv4.1: keep seq_res.sr_slot as pointer rather than an index 2010-09-24 09:17:01 -04:00
super.c nfs: show "local_lock" mount option in /proc/mounts 2010-09-23 14:26:48 -04:00
symlink.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sysctl.c NFS: new idmapper 2010-10-07 18:48:49 -04:00
unlink.c NFSv4.1: keep seq_res.sr_slot as pointer rather than an index 2010-09-24 09:17:01 -04:00
write.c NFS: don't use FLUSH_SYNC on WB_SYNC_NONE COMMIT calls (try #2) 2010-09-29 14:42:30 -04:00