All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/17] nfs: support multiple requests per page
@ 2014-04-22 21:29 Weston Andros Adamson
  2014-04-22 21:29 ` [PATCH 01/17] nfs: clean up PG_* flags Weston Andros Adamson
                   ` (16 more replies)
  0 siblings, 17 replies; 35+ messages in thread
From: Weston Andros Adamson @ 2014-04-22 21:29 UTC (permalink / raw)
  To: trond.myklebust; +Cc: linux-nfs, Weston Andros Adamson

This patchset changes the read and write paths to be more flexible in dealing
with requests that are not page aligned. Until now there was a 1:1 mapping
of struct nfs_page (referred to as "nfs requests") to struct page, which
limited the client to page aligned I/O in several pNFS scenarios.

This patchset allows multiple requests per page, loosely following
the approach taken with struct buffer_head (part of kernel bio interface).

With this patchset the client now supports:
 - non-page-aligned O_DIRECT I/O to DSes (instead of reverting to MDS)
 - arbitrary pnfs layout segment boundaries
 - arbitrary pnfs filelayout stripe sizes

This patchset also includes a lot of cleanup - notably we no longer need
a separate code path to support rsize/wsize < PAGE_SIZE.

This new approach opens the door to many optimizations, such as not having to
flush a page on a non-contiguous write, but for the time being we are focusing
on correctness -- this patchset touches the read and write path for *all*
versions of NFS!

This has been tested against v2, v3, v4.0 and v4.1 (no pnfs) servers with
different rsize/wsize settings, and against pynfs filelayout servers hacked to
have non page aligned stripe sizes.

I had some code review already (with changes applied) and we've been testing
this pretty extensively for the last month+ - focusing mostly on v2, v3, v4.x
(no pnfs).

The patchset applies against Trond's testing branch, but should also include
the fix I posted earlier today: "pnfs: fix race in filelayout commit path"
as the race seems to be easier to hit with this patchset applied.

I'm pretty sure I didn't break anything in the object and block layouts, but
some extra attention there would be helpful.

I plan on sharing some performance numbers once I'm able to run some nfsometer
workloads. Expect them soon.

 -dros

Weston Andros Adamson (17):
  nfs: clean up PG_* flags
  nfs: remove unused arg from nfs_create_request
  nfs: modify pg_test interface to return size_t
  nfs: call nfs_can_coalesce_requests for every req
  nfs: add support for multiple nfs reqs per page
  nfs: page group syncing in read path
  nfs: page group syncing in write path
  nfs: page group support in nfs_mark_uptodate
  pnfs: clean up filelayout_alloc_commit_info
  nfs: allow coalescing of subpage requests
  nfs: chain calls to pg_test
  nfs: use > 1 request to handle bsize < PAGE_SIZE
  nfs: remove list of [rw]data from pgio header
  pnfs: support multiple verfs per direct req
  pnfs: allow non page aligned pnfs layout segments
  pnfs: filelayout: support non page aligned layouts
  nfs: support page groups in nfs_read_completion

 fs/nfs/blocklayout/blocklayout.c |  16 ++-
 fs/nfs/direct.c                  |  93 ++++++++++---
 fs/nfs/nfs4filelayout.c          | 121 +++++++++--------
 fs/nfs/objlayout/objio_osd.c     |  20 ++-
 fs/nfs/pagelist.c                | 284 +++++++++++++++++++++++++++++++++------
 fs/nfs/pnfs.c                    |  77 +++++------
 fs/nfs/pnfs.h                    |   3 +-
 fs/nfs/read.c                    | 149 +++++++-------------
 fs/nfs/write.c                   | 217 +++++++++++++++---------------
 include/linux/nfs.h              |   5 +-
 include/linux/nfs_page.h         |  32 +++--
 include/linux/nfs_xdr.h          |  37 ++---
 12 files changed, 650 insertions(+), 404 deletions(-)

-- 
1.8.5.2 (Apple Git-48)


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

end of thread, other threads:[~2014-04-24 17:23 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-22 21:29 [PATCH 00/17] nfs: support multiple requests per page Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 01/17] nfs: clean up PG_* flags Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 02/17] nfs: remove unused arg from nfs_create_request Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 03/17] nfs: modify pg_test interface to return size_t Weston Andros Adamson
2014-04-23 12:30   ` Boaz Harrosh
2014-04-22 21:29 ` [PATCH 04/17] nfs: call nfs_can_coalesce_requests for every req Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 05/17] nfs: add support for multiple nfs reqs per page Weston Andros Adamson
2014-04-22 21:40   ` Weston Andros Adamson
2014-04-23 14:40     ` Weston Andros Adamson
2014-04-24 14:50   ` Jeff Layton
2014-04-24 15:23     ` Weston Andros Adamson
2014-04-24 15:45       ` Jeff Layton
2014-04-24 16:15         ` Weston Andros Adamson
2014-04-24 16:52           ` Jeff Layton
2014-04-24 17:23             ` Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 06/17] nfs: page group syncing in read path Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 07/17] nfs: page group syncing in write path Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 08/17] nfs: page group support in nfs_mark_uptodate Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 09/17] pnfs: clean up filelayout_alloc_commit_info Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 10/17] nfs: allow coalescing of subpage requests Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 11/17] nfs: chain calls to pg_test Weston Andros Adamson
2014-04-23 12:20   ` Boaz Harrosh
2014-04-23 13:37     ` Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 12/17] nfs: use > 1 request to handle bsize < PAGE_SIZE Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 13/17] nfs: remove list of [rw]data from pgio header Weston Andros Adamson
2014-04-23 14:16   ` Anna Schumaker
2014-04-23 14:31     ` Weston Andros Adamson
2014-04-23 14:36       ` Anna Schumaker
2014-04-23 17:44         ` Weston Andros Adamson
2014-04-23 17:51           ` Anna Schumaker
2014-04-24 11:55             ` Boaz Harrosh
2014-04-22 21:29 ` [PATCH 14/17] pnfs: support multiple verfs per direct req Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 15/17] pnfs: allow non page aligned pnfs layout segments Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 16/17] pnfs: filelayout: support non page aligned layouts Weston Andros Adamson
2014-04-22 21:29 ` [PATCH 17/17] nfs: support page groups in nfs_read_completion Weston Andros Adamson

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.