git: a599f9f7620b - stable/13 - nfscl: Make vfs.nfs.maxcopyrange larger by default

Rick Macklem rmacklem at FreeBSD.org
Sun Oct 3 22:45:49 UTC 2021


The branch stable/13 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=a599f9f7620b81550fb40a607067e7c697b0490c

commit a599f9f7620b81550fb40a607067e7c697b0490c
Author:     Rick Macklem <rmacklem at FreeBSD.org>
AuthorDate: 2021-09-11 22:36:32 +0000
Commit:     Rick Macklem <rmacklem at FreeBSD.org>
CommitDate: 2021-10-03 22:42:41 +0000

    nfscl: Make vfs.nfs.maxcopyrange larger by default
    
    As of commit 103b207536f9, the NFSv4.2 server will limit the size
    of a Copy operation based upon a 1 second timeout.  The Linux 5.2
    kernel server also limits Copy operation size to 4Mbytes.
    As such, the NFSv4.2 client can attempt a large Copy without
    resulting in a long RPC RTT for these servers.
    
    This patch changes vfs.nfs.maxcopyrange to 64bits and sets
    the default to the maximum possible size of SSIZE_MAX, since
    a larger size makes the Copy operation more efficient and
    allows for copying to complete with fewer RPCs.
    The sysctl may be need to be made smaller for other non-FreeBSD
    NFSv4.2 servers.
    
    (cherry picked from commit 55089ef4f8bb7c4d18ee964b4214024e35ae4b0e)
---
 sys/fs/nfs/nfs_commonsubs.c     | 4 ----
 sys/fs/nfsclient/nfs_clrpcops.c | 5 ++++-
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c
index 817d89284091..42b839c8567e 100644
--- a/sys/fs/nfs/nfs_commonsubs.c
+++ b/sys/fs/nfs/nfs_commonsubs.c
@@ -95,10 +95,6 @@ int nfsrv_maxpnfsmirror = 1;
 SYSCTL_INT(_vfs_nfs, OID_AUTO, pnfsmirror, CTLFLAG_RD,
     &nfsrv_maxpnfsmirror, 0, "Mirror level for pNFS service");
 
-int nfs_maxcopyrange = 10 * 1024 * 1024;
-SYSCTL_INT(_vfs_nfs, OID_AUTO, maxcopyrange, CTLFLAG_RW,
-    &nfs_maxcopyrange, 0, "Max size of a Copy so RPC times reasonable");
-
 /*
  * This array of structures indicates, for V4:
  * retfh - which of 3 types of calling args are used
diff --git a/sys/fs/nfsclient/nfs_clrpcops.c b/sys/fs/nfsclient/nfs_clrpcops.c
index 2f6226e38415..984a63484777 100644
--- a/sys/fs/nfsclient/nfs_clrpcops.c
+++ b/sys/fs/nfsclient/nfs_clrpcops.c
@@ -62,6 +62,10 @@ static int	nfscl_dssameconn = 0;
 SYSCTL_INT(_vfs_nfs, OID_AUTO, dssameconn, CTLFLAG_RW,
     &nfscl_dssameconn, 0, "Use same TCP connection to multiple DSs");
 
+static uint64_t nfs_maxcopyrange = SSIZE_MAX;
+SYSCTL_U64(_vfs_nfs, OID_AUTO, maxcopyrange, CTLFLAG_RW,
+    &nfs_maxcopyrange, 0, "Max size of a Copy so RPC times reasonable");
+
 /*
  * Global variables
  */
@@ -75,7 +79,6 @@ extern char nfsv4_callbackaddr[INET6_ADDRSTRLEN];
 extern int nfscl_debuglevel;
 extern int nfs_pnfsiothreads;
 extern u_long sb_max_adj;
-extern int nfs_maxcopyrange;
 NFSCLSTATEMUTEX;
 int nfstest_outofseq = 0;
 int nfscl_assumeposixlocks = 1;


More information about the dev-commits-src-all mailing list