[PATCHSET RFC v4 2/4] fuse: allow servers to use iomap for better file IO performance

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

 



Hi all,

This series connects fuse (the userspace filesystem layer) to fs-iomap
to get fuse servers out of the business of handling file I/O themselves.
By keeping the IO path mostly within the kernel, we can dramatically
improve the speed of disk-based filesystems.  This enables us to move
all the filesystem metadata parsing code out of the kernel and into
userspace, which means that we can containerize them for security
without losing a lot of performance.

If you're going to start using this code, I strongly recommend pulling
from my git trees, which are linked below.

This has been running on the djcloud for months with no problems.  Enjoy!
Comments and questions are, as always, welcome.

--D

kernel git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=fuse-iomap
---
Commits in this patchset:
 * fuse: move CREATE_TRACE_POINTS to a separate file
 * fuse: implement the basic iomap mechanisms
 * fuse: make debugging configurable at runtime
 * fuse: move the backing file idr and code into a new source file
 * fuse: move the passthrough-specific code back to passthrough.c
 * fuse: add an ioctl to add new iomap devices
 * fuse: flush events and send FUSE_SYNCFS and FUSE_DESTROY on unmount
 * fuse: implement basic iomap reporting such as FIEMAP and SEEK_{DATA,HOLE}
 * fuse: implement direct IO with iomap
 * fuse: implement buffered IO with iomap
 * fuse: enable caching of timestamps
 * fuse: implement large folios for iomap pagecache files
 * fuse: use an unrestricted backing device with iomap pagecache io
 * fuse: advertise support for iomap
 * fuse: query filesystem geometry when using iomap
 * fuse: implement fadvise for iomap files
 * fuse: make the root nodeid dynamic
 * fuse: allow setting of root nodeid
 * fuse: invalidate ranges of block devices being used for iomap
 * fuse: implement inline data file IO via iomap
 * fuse: allow more statx fields
 * fuse: support atomic writes with iomap
 * fuse: enable iomap
---
 fs/fuse/fuse_i.h          |  249 +++++
 fs/fuse/fuse_trace.h      |  996 +++++++++++++++++++++
 fs/fuse/iomap_priv.h      |   52 +
 include/uapi/linux/fuse.h |  195 ++++
 fs/fuse/Kconfig           |   45 +
 fs/fuse/Makefile          |    5 
 fs/fuse/backing.c         |  237 +++++
 fs/fuse/dev.c             |   35 +
 fs/fuse/dir.c             |  117 ++
 fs/fuse/file.c            |  133 ++-
 fs/fuse/file_iomap.c      | 2183 +++++++++++++++++++++++++++++++++++++++++++++
 fs/fuse/inode.c           |   92 +-
 fs/fuse/passthrough.c     |  199 +---
 fs/fuse/readdir.c         |   10 
 fs/fuse/trace.c           |   15 
 15 files changed, 4316 insertions(+), 247 deletions(-)
 create mode 100644 fs/fuse/iomap_priv.h
 create mode 100644 fs/fuse/backing.c
 create mode 100644 fs/fuse/file_iomap.c
 create mode 100644 fs/fuse/trace.c





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

  Powered by Linux