-
- Downloads
netfs: Speed up buffered reading
Improve the efficiency of buffered reads in a number of ways: (1) Overhaul the algorithm in general so that it's a lot more compact and split the read submission code between buffered and unbuffered versions. The unbuffered version can be vastly simplified. (2) Read-result collection is handed off to a work queue rather than being done in the I/O thread. Multiple subrequests can be processes simultaneously. (3) When a subrequest is collected, any folios it fully spans are collected and "spare" data on either side is donated to either the previous or the next subrequest in the sequence. Notes: (*) Readahead expansion is massively slows down fio, presumably because it causes a load of extra allocations, both folio and xarray, up front before RPC requests can be transmitted. (*) RDMA with cifs does appear to work, both with SIW and RXE. (*) PG_private_2-based reading and copy-to-cache is split out into its own file and altered to use folio_queue. Note that the copy to the cache now creates a new write transaction against the cache and adds the folios to be copied into it. This allows it to use part of the writeback I/O code. Signed-off-by:David Howells <dhowells@redhat.com> cc: Jeff Layton <jlayton@kernel.org> cc: netfs@lists.linux.dev cc: linux-fsdevel@vger.kernel.org Link: https://lore.kernel.org/r/20240814203850.2240469-20-dhowells@redhat.com/ # v2 Signed-off-by:
Christian Brauner <brauner@kernel.org>
Showing
- fs/9p/vfs_addr.c 8 additions, 3 deletionsfs/9p/vfs_addr.c
- fs/afs/file.c 15 additions, 6 deletionsfs/afs/file.c
- fs/afs/fsclient.c 7 additions, 2 deletionsfs/afs/fsclient.c
- fs/afs/yfsclient.c 7 additions, 2 deletionsfs/afs/yfsclient.c
- fs/ceph/addr.c 46 additions, 30 deletionsfs/ceph/addr.c
- fs/netfs/Makefile 3 additions, 1 deletionfs/netfs/Makefile
- fs/netfs/buffered_read.c 471 additions, 295 deletionsfs/netfs/buffered_read.c
- fs/netfs/direct_read.c 141 additions, 6 deletionsfs/netfs/direct_read.c
- fs/netfs/internal.h 28 additions, 7 deletionsfs/netfs/internal.h
- fs/netfs/iterator.c 50 additions, 0 deletionsfs/netfs/iterator.c
- fs/netfs/main.c 3 additions, 1 deletionfs/netfs/main.c
- fs/netfs/objects.c 5 additions, 3 deletionsfs/netfs/objects.c
- fs/netfs/read_collect.c 544 additions, 0 deletionsfs/netfs/read_collect.c
- fs/netfs/read_pgpriv2.c 264 additions, 0 deletionsfs/netfs/read_pgpriv2.c
- fs/netfs/read_retry.c 256 additions, 0 deletionsfs/netfs/read_retry.c
- fs/netfs/stats.c 4 additions, 2 deletionsfs/netfs/stats.c
- fs/netfs/write_collect.c 8 additions, 1 deletionfs/netfs/write_collect.c
- fs/netfs/write_issue.c 7 additions, 10 deletionsfs/netfs/write_issue.c
- fs/nfs/fscache.c 6 additions, 13 deletionsfs/nfs/fscache.c
- fs/nfs/fscache.h 3 additions, 4 deletionsfs/nfs/fscache.h
Loading
Please register or sign in to comment