From: David Howells <dhowells@redhat.com>
To: Christian Brauner <christian@brauner.io>,
Steve French <smfrench@gmail.com>,
Matthew Wilcox <willy@infradead.org>
Cc: David Howells <dhowells@redhat.com>,
Jeff Layton <jlayton@kernel.org>,
Gao Xiang <hsiangkao@linux.alibaba.com>,
Dominique Martinet <asmadeus@codewreck.org>,
Marc Dionne <marc.dionne@auristor.com>,
Paulo Alcantara <pc@manguebit.com>,
Shyam Prasad N <sprasad@microsoft.com>,
Tom Talpey <tom@talpey.com>,
Eric Van Hensbergen <ericvh@kernel.org>,
Ilya Dryomov <idryomov@gmail.com>,
netfs@lists.linux.dev, linux-afs@lists.infradead.org,
linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org,
ceph-devel@vger.kernel.org, v9fs@lists.linux.dev,
linux-erofs@lists.ozlabs.org, linux-fsdevel@vger.kernel.org,
linux-mm@kvack.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH v2 00/25] netfs: Read/write improvements
Date: Wed, 14 Aug 2024 21:38:20 +0100 [thread overview]
Message-ID: <20240814203850.2240469-1-dhowells@redhat.com> (raw)
Hi Christian, Steve, Willy,
This set of patches includes a couple of fixes:
(1) Revert the removal of waits on PG_private_2 from netfs_release_page()
and netfs_invalidate_page().
(2) Make cachefiles take the sb_writers lock around set/removexattr.
A couple of adjustments to the /proc/fs/netfs/stats file:
(3) All the netfs stats lines begin 'Netfs:'. Change this to something a
bit more useful.
(4) Add a couple of stats counters to track the numbers of skips and waits
on the per-inode writeback serialisation lock to make it easier to
check for this as a source of performance loss.
Some miscellaneous bits:
(5) Reduce the number of conditional branches in netfs_perform_write().
(6) Move the CIFS_INO_MODIFIED_ATTR flag to the netfs_inode struct and
remove cifs_post_modify().
(7) Move the max_len/max_nr_segs members from netfs_io_subrequest to
netfs_io_request as they're only needed for one subreq at a time.
(8) Add an 'unknown' source value for tracing purposes.
(9) Remove NETFS_COPY_TO_CACHE as it's no longer used.
(10) Set the request work function up front at allocation time.
(11) Use bh-disabling spinlocks for rreq->lock as cachefiles completion may
be run from block-filesystem DIO completion in softirq context.
Then there's the main performance enhancing changes:
(12) Define a structure, struct folio_queue, and a new iterator type,
ITER_FOLIOQ, to hold a buffer as a replacement for ITER_XARRAY. See
that patch for questions about naming and form.
(13) Provide a copy_folio_from_iter() wrapper.
(14) Make cifs RDMA support ITER_FOLIOQ.
(15) Use folio queues in the write-side helpers instead of xarrays.
(16) Add a function to reset the iterator in a subrequest.
(17) Simplify the write-side helpers to use sheaves to skip gaps rather than
trying to work out where gaps are.
(18) In afs, make the read subrequests asynchronous, putting them into work
items to allow the next patch to do progressive unlocking/reading.
(19) Overhaul the read-side helpers to improve performance.
(20) Remove fs/netfs/io.c.
(21) Fix the caching of a partial block at the end of a file.
(22) Allow a store to be cancelled.
Then some changes for cifs to make it use folio queues instead of xarrays
for crypto bufferage:
(23) Use raw iteration functions rather than manually coding iteration when
hashing data.
(24) Switch to using folio_queue for crypto buffers.
(25) Remove the xarray bits.
Changes
=======
ver #2)
- Rebase to the merge of vfs.fixes after v6.11-rc3.
- Add fixes for missing waits on PG_private_2.
- Make the read-side helper overhaul support PG_private_2-based
filesystems also.
- When reading, only limit server downloads to the max download size, not
cache reads or simple zeroing.
- Add some missing cases of skipping forward when iterating over a folio
queue list when the place we're at has the current slot number parked
just past the last slot (typically, because we're extending the list
incrementally).
- Don't use folio_batch_release() to release the refs on pages in the
folio_queue struct mid-read as we rely on the count in the batch later.
- Fix the determination of whether an operation can access the cache.
David
David Howells (25):
netfs, ceph: Partially revert "netfs: Replace PG_fscache by setting
folio->private and marking dirty"
cachefiles: Fix non-taking of sb_writers around set/removexattr
netfs: Adjust labels in /proc/fs/netfs/stats
netfs: Record contention stats for writeback lock
netfs: Reduce number of conditional branches in netfs_perform_write()
netfs, cifs: Move CIFS_INO_MODIFIED_ATTR to netfs_inode
netfs: Move max_len/max_nr_segs from netfs_io_subrequest to
netfs_io_stream
netfs: Reserve netfs_sreq_source 0 as unset/unknown
netfs: Remove NETFS_COPY_TO_CACHE
netfs: Set the request work function upon allocation
netfs: Use bh-disabling spinlocks for rreq->lock
mm: Define struct folio_queue and ITER_FOLIOQ to handle a sequence of
folios
iov_iter: Provide copy_folio_from_iter()
cifs: Provide the capability to extract from ITER_FOLIOQ to RDMA SGEs
netfs: Use new folio_queue data type and iterator instead of xarray
iter
netfs: Provide an iterator-reset function
netfs: Simplify the writeback code
afs: Make read subreqs async
netfs: Speed up buffered reading
netfs: Remove fs/netfs/io.c
cachefiles, netfs: Fix write to partial block at EOF
netfs: Cancel dirty folios that have no storage destination
cifs: Use iterate_and_advance*() routines directly for hashing
cifs: Switch crypto buffer to use a folio_queue rather than an xarray
cifs: Don't support ITER_XARRAY
fs/9p/vfs_addr.c | 5 +-
fs/afs/file.c | 30 +-
fs/afs/fsclient.c | 9 +-
fs/afs/write.c | 4 +-
fs/afs/yfsclient.c | 9 +-
fs/cachefiles/io.c | 19 +-
fs/cachefiles/xattr.c | 34 +-
fs/ceph/addr.c | 76 ++--
fs/ceph/inode.c | 1 +
fs/netfs/Makefile | 4 +-
fs/netfs/buffered_read.c | 766 ++++++++++++++++++++-------------
fs/netfs/buffered_write.c | 309 +++++++-------
fs/netfs/direct_read.c | 147 ++++++-
fs/netfs/internal.h | 43 +-
fs/netfs/io.c | 796 -----------------------------------
fs/netfs/iterator.c | 50 +++
fs/netfs/main.c | 7 +-
fs/netfs/misc.c | 101 +++++
fs/netfs/objects.c | 16 +-
fs/netfs/read_collect.c | 544 ++++++++++++++++++++++++
fs/netfs/read_pgpriv2.c | 264 ++++++++++++
fs/netfs/read_retry.c | 256 +++++++++++
fs/netfs/stats.c | 27 +-
fs/netfs/write_collect.c | 246 ++++-------
fs/netfs/write_issue.c | 93 ++--
fs/nfs/fscache.c | 19 +-
fs/nfs/fscache.h | 7 +-
fs/smb/client/cifsencrypt.c | 144 +------
fs/smb/client/cifsglob.h | 3 +-
fs/smb/client/cifssmb.c | 6 +-
fs/smb/client/file.c | 71 ++--
fs/smb/client/smb2ops.c | 218 +++++-----
fs/smb/client/smb2pdu.c | 10 +-
fs/smb/client/smbdirect.c | 82 ++--
include/linux/folio_queue.h | 156 +++++++
include/linux/iov_iter.h | 104 +++++
include/linux/netfs.h | 45 +-
include/linux/uio.h | 18 +
include/trace/events/netfs.h | 144 +++++--
lib/iov_iter.c | 240 ++++++++++-
lib/kunit_iov_iter.c | 259 ++++++++++++
lib/scatterlist.c | 69 ++-
42 files changed, 3515 insertions(+), 1936 deletions(-)
delete mode 100644 fs/netfs/io.c
create mode 100644 fs/netfs/read_collect.c
create mode 100644 fs/netfs/read_pgpriv2.c
create mode 100644 fs/netfs/read_retry.c
create mode 100644 include/linux/folio_queue.h
next reply other threads:[~2024-08-14 20:39 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-14 20:38 David Howells [this message]
2024-08-14 20:38 ` [PATCH v2 01/25] netfs, ceph: Partially revert "netfs: Replace PG_fscache by setting folio->private and marking dirty" David Howells
2024-08-14 20:38 ` [PATCH v2 02/25] cachefiles: Fix non-taking of sb_writers around set/removexattr David Howells
2024-08-14 20:38 ` [PATCH v2 03/25] netfs: Adjust labels in /proc/fs/netfs/stats David Howells
2024-08-14 20:38 ` [PATCH v2 04/25] netfs: Record contention stats for writeback lock David Howells
2024-08-14 20:38 ` [PATCH v2 05/25] netfs: Reduce number of conditional branches in netfs_perform_write() David Howells
2024-08-14 20:38 ` [PATCH v2 06/25] netfs, cifs: Move CIFS_INO_MODIFIED_ATTR to netfs_inode David Howells
2024-08-14 20:38 ` [PATCH v2 07/25] netfs: Move max_len/max_nr_segs from netfs_io_subrequest to netfs_io_stream David Howells
2024-08-14 20:38 ` [PATCH v2 08/25] netfs: Reserve netfs_sreq_source 0 as unset/unknown David Howells
2024-08-14 20:38 ` [PATCH v2 09/25] netfs: Remove NETFS_COPY_TO_CACHE David Howells
2024-08-14 20:38 ` [PATCH v2 10/25] netfs: Set the request work function upon allocation David Howells
2024-08-14 20:38 ` [PATCH v2 11/25] netfs: Use bh-disabling spinlocks for rreq->lock David Howells
2024-08-14 20:38 ` [PATCH v2 12/25] mm: Define struct folio_queue and ITER_FOLIOQ to handle a sequence of folios David Howells
2024-08-14 20:38 ` [PATCH v2 13/25] iov_iter: Provide copy_folio_from_iter() David Howells
2024-08-14 20:38 ` [PATCH v2 14/25] cifs: Provide the capability to extract from ITER_FOLIOQ to RDMA SGEs David Howells
2024-08-14 20:38 ` [PATCH v2 15/25] netfs: Use new folio_queue data type and iterator instead of xarray iter David Howells
2024-09-24 9:48 ` Leon Romanovsky
2024-08-14 20:38 ` [PATCH v2 16/25] netfs: Provide an iterator-reset function David Howells
2024-08-14 20:38 ` [PATCH v2 17/25] netfs: Simplify the writeback code David Howells
2024-08-14 20:38 ` [PATCH v2 18/25] afs: Make read subreqs async David Howells
2024-08-14 20:38 ` [PATCH v2 19/25] netfs: Speed up buffered reading David Howells
2024-08-16 11:12 ` Simon Horman
2024-09-23 18:34 ` Manu Bretelle
2024-09-23 18:43 ` Eduard Zingerman
2024-09-23 21:56 ` Eduard Zingerman
2024-09-23 22:33 ` David Howells
2024-09-23 19:38 ` David Howells
2024-09-23 20:20 ` Manu Bretelle
2024-09-24 23:20 ` David Howells
2024-09-25 0:01 ` Eduard Zingerman
2024-09-25 10:31 ` Leon Romanovsky
2024-09-29 9:12 ` David Howells
2024-09-29 9:37 ` Eduard Zingerman
2024-09-29 18:55 ` Leon Romanovsky
2024-09-30 12:44 ` David Howells
2024-09-30 12:51 ` David Howells
2024-09-30 16:46 ` Eduard Zingerman
2024-09-30 18:35 ` David Howells
2024-09-30 19:00 ` Omar Sandoval
2024-09-27 20:50 ` David Howells
2024-09-27 20:55 ` Eduard Zingerman
2024-09-27 21:11 ` David Howells
2024-09-27 23:22 ` Eduard Zingerman
2024-08-14 20:38 ` [PATCH v2 20/25] netfs: Remove fs/netfs/io.c David Howells
2024-08-14 20:38 ` [PATCH v2 21/25] cachefiles, netfs: Fix write to partial block at EOF David Howells
2024-08-14 20:38 ` [PATCH v2 22/25] netfs: Cancel dirty folios that have no storage destination David Howells
2024-08-14 20:38 ` [PATCH v2 23/25] cifs: Use iterate_and_advance*() routines directly for hashing David Howells
2024-08-14 20:38 ` [PATCH v2 24/25] cifs: Switch crypto buffer to use a folio_queue rather than an xarray David Howells
2024-08-14 20:38 ` [PATCH v2 25/25] cifs: Don't support ITER_XARRAY David Howells
2024-08-15 13:07 ` [PATCH v2 00/25] netfs: Read/write improvements Christian Brauner
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=20240814203850.2240469-1-dhowells@redhat.com \
--to=dhowells@redhat.com \
--cc=asmadeus@codewreck.org \
--cc=ceph-devel@vger.kernel.org \
--cc=christian@brauner.io \
--cc=ericvh@kernel.org \
--cc=hsiangkao@linux.alibaba.com \
--cc=idryomov@gmail.com \
--cc=jlayton@kernel.org \
--cc=linux-afs@lists.infradead.org \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-erofs@lists.ozlabs.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-nfs@vger.kernel.org \
--cc=marc.dionne@auristor.com \
--cc=netdev@vger.kernel.org \
--cc=netfs@lists.linux.dev \
--cc=pc@manguebit.com \
--cc=smfrench@gmail.com \
--cc=sprasad@microsoft.com \
--cc=tom@talpey.com \
--cc=v9fs@lists.linux.dev \
--cc=willy@infradead.org \
/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).