• David Howells's avatar
    netfs: Speed up buffered reading · ee4cdf7b
    David Howells authored
    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: default avatarDavid 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: default avatarChristian Brauner <brauner@kernel.org>
    ee4cdf7b
buffered_read.c 26.5 KB