mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
ee4cdf7ba8
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>
34 lines
595 B
Makefile
34 lines
595 B
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
netfs-y := \
|
|
buffered_read.o \
|
|
buffered_write.o \
|
|
direct_read.o \
|
|
direct_write.o \
|
|
iterator.o \
|
|
locking.o \
|
|
main.o \
|
|
misc.o \
|
|
objects.o \
|
|
read_collect.o \
|
|
read_pgpriv2.o \
|
|
read_retry.o \
|
|
write_collect.o \
|
|
write_issue.o
|
|
|
|
netfs-$(CONFIG_NETFS_STATS) += stats.o
|
|
|
|
netfs-$(CONFIG_FSCACHE) += \
|
|
fscache_cache.o \
|
|
fscache_cookie.o \
|
|
fscache_io.o \
|
|
fscache_main.o \
|
|
fscache_volume.o
|
|
|
|
ifeq ($(CONFIG_PROC_FS),y)
|
|
netfs-$(CONFIG_FSCACHE) += fscache_proc.o
|
|
endif
|
|
netfs-$(CONFIG_FSCACHE_STATS) += fscache_stats.o
|
|
|
|
obj-$(CONFIG_NETFS_SUPPORT) += netfs.o
|