[RFC PATCH 00/22] Orangefs Through the Pagecache

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Mike Marshall <hubcap@xxxxxxxxxxxx>

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




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux