All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/9] nfsd: open file caching for v2/3
@ 2015-07-30 13:52 Jeff Layton
  2015-07-30 13:52 ` [PATCH] nfsd: do nfs4_check_fh in nfs4_check_file instead of nfs4_check_olstateid Jeff Layton
                   ` (10 more replies)
  0 siblings, 11 replies; 69+ messages in thread
From: Jeff Layton @ 2015-07-30 13:52 UTC (permalink / raw)
  To: bfields; +Cc: linux-nfs

Hi Bruce!

This patchset adds a new open file cache for knfsd. As you well know,
nfsd basically does an open() - read/write() - close() cycle for every
nfsv3 READ or WRITE. It's also common for clients to "spray" several
read and write requests in parallel or in quick succession, so we could
skip a lot of that by simply caching these open filps.

The idea here is to cache them in a hashtable for a little while (1s by
default) in the expectation that clients may try to issue more reads or
writes in quick succession. When there are any entries in the hashtable,
there is a recurring workqueue job that will clean the cache.

I've also added some hooks into sunrpc cache code that should allow us
to purge the cache on an unexport event, so this shouldn't cause any
problems with unmounting once you've unexported the fs.

I did a little testing with it, but my test rig is pretty slow, and I
couldn't measure much of a performance difference on a bog standard
local fs.

We do have some patches that allow the reexporting of NFSv4.1 via knfsd.
Since NFS has a relatively slow open routine, this provides a rather
large speedup.

Without these patches:
$ dd if=/dev/urandom of=/mnt/dp01/ddfile bs=4k count=256 oflag=direct
256+0 records in
256+0 records out
1048576 bytes (1.0 MB) copied, 54.3109 s, 19.3 kB/s

With these patches:
$ dd if=/dev/urandom of=/mnt/dp01/ddfile bs=4k count=256 oflag=direct
256+0 records in
256+0 records out
1048576 bytes (1.0 MB) copied, 1.05437 s, 995 kB/s

It should also be possible to hook this code up to the nfs4_file too,
but I haven't done that in this set. I'd like to get this in and settled
before we start looking at that, since it'll mean a bit of reengineering
of the NFSv4 code not to pass around struct file pointers.

I'd like to have these considered for the v4.3 merge window if they look
reasonable.

Jeff Layton (9):
  nfsd: include linux/nfs4.h in export.h
  nfsd: move some file caching helpers to a common header
  nfsd: convert laundry_wq to something less nfsd4 specific
  nfsd: add a new struct file caching facility to nfsd
  nfsd: hook up nfsd_write to the new nfsd_file cache
  nfsd: hook up nfsd_read to the nfsd_file cache
  sunrpc: add a new cache_detail operation for when a cache is flushed
  nfsd: add a ->flush routine to svc_export_cache
  nfsd: allow the file cache expire time to be tunable

 fs/nfsd/Makefile             |   3 +-
 fs/nfsd/export.c             |  14 ++
 fs/nfsd/export.h             |   1 +
 fs/nfsd/filecache.c          | 348 +++++++++++++++++++++++++++++++++++++++++++
 fs/nfsd/filecache.h          |  47 ++++++
 fs/nfsd/nfs3proc.c           |   2 +-
 fs/nfsd/nfs4state.c          |  40 +----
 fs/nfsd/nfsd.h               |   1 +
 fs/nfsd/nfsproc.c            |   2 +-
 fs/nfsd/nfssvc.c             |  22 ++-
 fs/nfsd/vfs.c                |  56 +++----
 fs/nfsd/vfs.h                |   2 +-
 include/linux/sunrpc/cache.h |   1 +
 net/sunrpc/cache.c           |   3 +
 14 files changed, 467 insertions(+), 75 deletions(-)
 create mode 100644 fs/nfsd/filecache.c
 create mode 100644 fs/nfsd/filecache.h

-- 
2.4.3


^ permalink raw reply	[flat|nested] 69+ messages in thread

end of thread, other threads:[~2015-08-10 14:33 UTC | newest]

Thread overview: 69+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-30 13:52 [PATCH 0/9] nfsd: open file caching for v2/3 Jeff Layton
2015-07-30 13:52 ` [PATCH] nfsd: do nfs4_check_fh in nfs4_check_file instead of nfs4_check_olstateid Jeff Layton
2015-07-30 13:53   ` Jeff Layton
2015-07-30 15:51   ` Christoph Hellwig
2015-07-30 16:20     ` Jeff Layton
2015-07-30 16:34       ` Christoph Hellwig
2015-07-30 13:52 ` [PATCH 1/9] nfsd: include linux/nfs4.h in export.h Jeff Layton
2015-07-30 13:52 ` [PATCH 2/9] nfsd: move some file caching helpers to a common header Jeff Layton
2015-07-30 13:52 ` [PATCH 3/9] nfsd: convert laundry_wq to something less nfsd4 specific Jeff Layton
2015-07-31 21:32   ` J. Bruce Fields
2015-07-31 22:27     ` Jeff Layton
2015-07-30 13:52 ` [PATCH 4/9] nfsd: add a new struct file caching facility to nfsd Jeff Layton
2015-07-30 13:52 ` [PATCH 5/9] nfsd: hook up nfsd_write to the new nfsd_file cache Jeff Layton
2015-07-30 13:52 ` [PATCH 6/9] nfsd: hook up nfsd_read to the " Jeff Layton
2015-07-30 13:52 ` [PATCH 7/9] sunrpc: add a new cache_detail operation for when a cache is flushed Jeff Layton
2015-07-30 13:52 ` [PATCH 8/9] nfsd: add a ->flush routine to svc_export_cache Jeff Layton
2015-07-30 13:52 ` [PATCH 9/9] nfsd: allow the file cache expire time to be tunable Jeff Layton
2015-08-05 21:13 ` [PATCH v2 00/18] nfsd: open file caching for v2/3 Jeff Layton
2015-08-05 21:13   ` [PATCH v2 01/18] nfsd: include linux/nfs4.h in export.h Jeff Layton
2015-08-09  7:12     ` Christoph Hellwig
2015-08-05 21:13   ` [PATCH v2 02/18] nfsd: move some file caching helpers to a common header Jeff Layton
2015-08-07 15:25     ` Kinglong Mee
2015-08-07 17:07       ` Jeff Layton
2015-08-09  7:12     ` Christoph Hellwig
2015-08-05 21:13   ` [PATCH v2 03/18] nfsd: convert laundry_wq to something less nfsd4 specific Jeff Layton
2015-08-07 15:26     ` Kinglong Mee
2015-08-07 17:12       ` Jeff Layton
2015-08-09  7:14     ` Christoph Hellwig
2015-08-09 11:11       ` Jeff Layton
2015-08-10  8:26         ` Christoph Hellwig
2015-08-10 11:23           ` Jeff Layton
2015-08-10 12:10             ` Christoph Hellwig
2015-08-10 12:14               ` Jeff Layton
2015-08-10 14:33                 ` J. Bruce Fields
2015-08-05 21:13   ` [PATCH v2 04/18] nfsd: add a new struct file caching facility to nfsd Jeff Layton
2015-08-07 15:28     ` Kinglong Mee
2015-08-07 17:18       ` Jeff Layton
2015-08-08  0:14         ` Kinglong Mee
2015-08-08 10:36           ` Jeff Layton
2015-08-10 11:36             ` Kinglong Mee
2015-08-09  7:17     ` Christoph Hellwig
2015-08-09 11:19       ` Jeff Layton
2015-08-10  8:28         ` Christoph Hellwig
2015-08-10 11:31           ` Jeff Layton
2015-08-05 21:13   ` [PATCH v2 05/18] nfsd: hook up nfsd_write to the new nfsd_file cache Jeff Layton
2015-08-05 21:13   ` [PATCH v2 06/18] nfsd: hook up nfsd_read to the " Jeff Layton
2015-08-07 15:29     ` Kinglong Mee
2015-08-07 17:26       ` Jeff Layton
2015-08-08  0:19         ` Kinglong Mee
2015-08-05 21:13   ` [PATCH v2 07/18] sunrpc: add a new cache_detail operation for when a cache is flushed Jeff Layton
2015-08-05 21:13   ` [PATCH v2 08/18] nfsd: add a ->flush routine to svc_export_cache Jeff Layton
2015-08-05 21:13   ` [PATCH v2 09/18] nfsd: allow the file cache expire time to be tunable Jeff Layton
2015-08-05 21:13   ` [PATCH v2 10/18] nfsd: handle NFSD_MAY_NOT_BREAK_LEASE in open file cache Jeff Layton
2015-08-05 21:13   ` [PATCH v2 11/18] nfsd: hook nfsd_commit up to the nfsd_file cache Jeff Layton
2015-08-05 21:13   ` [PATCH v2 12/18] nfsd: move include of state.h from trace.c to trace.h Jeff Layton
2015-08-09  7:18     ` Christoph Hellwig
2015-08-05 21:13   ` [PATCH v2 13/18] nfsd: add new tracepoints for nfsd_file cache Jeff Layton
2015-08-05 21:13   ` [PATCH v2 14/18] nfsd: have _fh_update take a knfsd_fh instead of a svc_fh Jeff Layton
2015-08-09  7:21     ` Christoph Hellwig
2015-08-05 21:13   ` [PATCH v2 15/18] nfsd: have set_version_and_fsid_type take a knfsd_fh instead of svc_fh Jeff Layton
2015-08-09  7:21     ` Christoph Hellwig
2015-08-05 21:13   ` [PATCH v2 16/18] nfsd: add a fh_compose_shallow Jeff Layton
2015-08-07 15:33     ` Kinglong Mee
2015-08-07 17:56       ` Jeff Layton
2015-08-07 18:24         ` Jeff Layton
2015-08-08  0:27           ` Kinglong Mee
2015-08-08 10:38             ` Jeff Layton
2015-08-05 21:13   ` [PATCH v2 17/18] nfsd: close cached files prior to a REMOVE or RENAME that would replace target Jeff Layton
2015-08-05 21:13   ` [PATCH v2 18/18] nfsd: call flush_delayed_fput from nfsd_file_close_fh Jeff Layton

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.