Patch "nfs: Avoid flushing many pages with NFS_FILE_SYNC" has been added to the 6.6-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    nfs: Avoid flushing many pages with NFS_FILE_SYNC

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     nfs-avoid-flushing-many-pages-with-nfs_file_sync.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4285b095ea13eae13eceb21c125763c0430715d4
Author: Jan Kara <jack@xxxxxxx>
Date:   Fri May 24 18:14:19 2024 +0200

    nfs: Avoid flushing many pages with NFS_FILE_SYNC
    
    [ Upstream commit a527c3ba41c4c61e2069bfce4091e5515f06a8dd ]
    
    When we are doing WB_SYNC_ALL writeback, nfs submits write requests with
    NFS_FILE_SYNC flag to the server (which then generally treats it as an
    O_SYNC write). This helps to reduce latency for single requests but when
    submitting more requests, additional fsyncs on the server side hurt
    latency. NFS generally avoids this additional overhead by not setting
    NFS_FILE_SYNC if desc->pg_moreio is set.
    
    However this logic doesn't always work. When we do random 4k writes to a huge
    file and then call fsync(2), each page writeback is going to be sent with
    NFS_FILE_SYNC because after preparing one page for writeback, we start writing
    back next, nfs_do_writepage() will call nfs_pageio_cond_complete() which finds
    the page is not contiguous with previously prepared IO and submits is *without*
    setting desc->pg_moreio.  Hence NFS_FILE_SYNC is used resulting in poor
    performance.
    
    Fix the problem by setting desc->pg_moreio in nfs_pageio_cond_complete() before
    submitting outstanding IO. This improves throughput of
    fsync-after-random-writes on my test SSD from ~70MB/s to ~250MB/s.
    
    Signed-off-by: Jan Kara <jack@xxxxxxx>
    Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
index 6efb5068c116e..040b6b79c75e5 100644
--- a/fs/nfs/pagelist.c
+++ b/fs/nfs/pagelist.c
@@ -1545,6 +1545,11 @@ void nfs_pageio_cond_complete(struct nfs_pageio_descriptor *desc, pgoff_t index)
 					continue;
 			} else if (index == prev->wb_index + 1)
 				continue;
+			/*
+			 * We will submit more requests after these. Indicate
+			 * this to the underlying layers.
+			 */
+			desc->pg_moreio = 1;
 			nfs_pageio_complete(desc);
 			break;
 		}




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux