linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: hubcap@kernel.org
To: linux-fsdevel@vger.kernel.org, christoph@lameter.com,
	martin@omnibond.com
Cc: Mike Marshall <hubcap@omnibond.com>
Subject: [RFC PATCH 00/22] Orangefs Through the Pagecache
Date: Thu, 18 Apr 2019 14:40:52 -0400	[thread overview]
Message-ID: <20190418184113.9152-1-hubcap@kernel.org> (raw)

From: Mike Marshall <hubcap@omnibond.com>

Until now the Orangefs kernel module has not gone through the pagecache
and has been a de facto O_DIRECT style module.

This patch series adds pagecache support and greatly improves
small IO. For example, xfstest generic/069 used to take several
hours on our test VMs, and now finishes in seconds.

Orangefs' kernel module shares a memory buffer with Orangefs'
userspace parts for IO. Orangefs can best exploit parallelism when
the buffer is significantly filled, and struggles when the buffer
is nearly empty. Buffering reads and writes through the pagecache
helps us to communicate with userspace less often with buffers
that are more full.

Reads can be tuned with "count" from read(2) to simulate page sizes
more in line with Orangefs's buffer size (4 meg by default). Userspace
will deposit "count" bytes in the shared buffer on a read and when
the VFS calls orangefs_readpage, as many pagecache pages as possible
will be filled at once.

Writes are coalesced even across pages when possible up to the size of
the buffer between the OrangeFS client core and the kernel.  This is
4 MB by default.  This means that an application writing with a block
size less than 4 MB will have its writes upgraded.  For sequential
writes, this is a big improvement.


Martin Brandenburg (19):
  orangefs: implement xattr cache
  orangefs: do not invalidate attributes on inode create
  orangefs: simplify orangefs_inode_getattr interface
  orangefs: update attributes rather than relying on server
  orangefs: hold i_lock during inode_getattr
  orangefs: set up and use backing_dev_info
  orangefs: let setattr write to cached inode
  orangefs: reorganize setattr functions to track attribute changes
  orangefs: remove orangefs_readpages
  orangefs: service ops done for writeback are not killable
  orangefs: migrate to generic_file_read_iter
  orangefs: implement writepage
  orangefs: do not return successful read when the client-core
    disappeared
  orangefs: move do_readv_writev to direct_IO
  orangefs: skip inode writeout if nothing to write
  orangefs: avoid fsync service operation on flush
  orangefs: write range tracking
  orangefs: implement writepages
  orangefs: add orangefs_revalidate_mapping

Mike Marshall (3):
  orangefs: remember count when reading.
  orangefs: pass slot index back to readpage.
  orangefs: copy Orangefs-sized blocks into the pagecache if possible.

 fs/orangefs/acl.c              |   4 +-
 fs/orangefs/file.c             | 389 ++++++--------
 fs/orangefs/inode.c            | 908 +++++++++++++++++++++++++++++----
 fs/orangefs/namei.c            |  40 +-
 fs/orangefs/orangefs-bufmap.c  |  13 +
 fs/orangefs/orangefs-bufmap.h  |   2 +
 fs/orangefs/orangefs-debugfs.c |   4 +-
 fs/orangefs/orangefs-kernel.h  |  56 +-
 fs/orangefs/orangefs-mod.c     |   1 +
 fs/orangefs/orangefs-sysfs.c   |  22 +
 fs/orangefs/orangefs-utils.c   | 179 +++----
 fs/orangefs/super.c            |  39 +-
 fs/orangefs/waitqueue.c        |  18 +-
 fs/orangefs/xattr.c            | 106 +++-
 14 files changed, 1293 insertions(+), 488 deletions(-)

-- 
2.20.1


             reply	other threads:[~2019-04-18 18:42 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-18 18:40 hubcap [this message]
2019-04-18 18:40 ` [PATCH 01/22] orangefs: implement xattr cache hubcap
2019-04-18 18:40 ` [PATCH 02/22] orangefs: do not invalidate attributes on inode create hubcap
2019-04-18 18:40 ` [PATCH 03/22] orangefs: simplify orangefs_inode_getattr interface hubcap
2019-04-18 18:40 ` [PATCH 04/22] orangefs: update attributes rather than relying on server hubcap
2019-04-18 18:40 ` [PATCH 05/22] orangefs: hold i_lock during inode_getattr hubcap
2019-04-18 18:40 ` [PATCH 06/22] orangefs: set up and use backing_dev_info hubcap
2019-04-18 18:40 ` [PATCH 07/22] orangefs: let setattr write to cached inode hubcap
2019-04-18 18:41 ` [PATCH 08/22] orangefs: reorganize setattr functions to track attribute changes hubcap
2019-04-18 18:41 ` [PATCH 09/22] orangefs: remove orangefs_readpages hubcap
2019-04-18 18:41 ` [PATCH 10/22] orangefs: service ops done for writeback are not killable hubcap
2019-04-18 18:41 ` [PATCH 11/22] orangefs: migrate to generic_file_read_iter hubcap
2019-04-18 18:41 ` [PATCH 12/22] orangefs: implement writepage hubcap
2019-04-18 18:41 ` [PATCH 13/22] orangefs: do not return successful read when the client-core disappeared hubcap
2019-04-18 18:41 ` [PATCH 14/22] orangefs: move do_readv_writev to direct_IO hubcap
2019-04-18 18:41 ` [PATCH 15/22] orangefs: skip inode writeout if nothing to write hubcap
2019-04-18 18:41 ` [PATCH 16/22] orangefs: avoid fsync service operation on flush hubcap
2019-04-18 18:41 ` [PATCH 17/22] orangefs: write range tracking hubcap
2019-04-18 18:41 ` [PATCH 18/22] orangefs: implement writepages hubcap
2019-04-18 18:41 ` [PATCH 19/22] orangefs: add orangefs_revalidate_mapping hubcap
2019-04-18 18:41 ` [PATCH 20/22] orangefs: remember count when reading hubcap
2019-04-18 18:41 ` [PATCH 21/22] orangefs: pass slot index back to readpage hubcap
2019-04-18 18:41 ` [PATCH 22/22] orangefs: copy Orangefs-sized blocks into the pagecache if possible hubcap

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=20190418184113.9152-1-hubcap@kernel.org \
    --to=hubcap@kernel.org \
    --cc=christoph@lameter.com \
    --cc=hubcap@omnibond.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=martin@omnibond.com \
    /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;
as well as URLs for NNTP newsgroup(s).