summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastien Roy <seb@delphix.com>2012-06-06 11:43:04 -0700
committerDan McDonald <danmcd@omniti.com>2016-12-07 14:10:24 -0500
commit201f5eba35ac4c04e6a037fd065c45c6b8cb9ab1 (patch)
treedb8bf2b84271f5f3ce8ae183fa40f8b4597ce831
parentd1054fda727523967470132ee7266d3d934b5124 (diff)
downloadillumos-joyent-201f5eba35ac4c04e6a037fd065c45c6b8cb9ab1.tar.gz
7651 default maximum nfs server threads is insufficient
Reviewed by: Dan McDonald <danmcd@omniti.com> Reviewed by: Jason King <jason.brian.king@gmail.com> Reviewed by: Marcel Telka <marcel@telka.sk> Approved by: Matthew Ahrens <mahrens@delphix.com>
-rw-r--r--usr/src/cmd/fs.d/nfs/lockd/lockd.c2
-rw-r--r--usr/src/cmd/fs.d/nfs/nfsd/nfsd.c4
-rw-r--r--usr/src/cmd/fs.d/nfs/svc/nlockmgr.xml4
-rw-r--r--usr/src/cmd/fs.d/nfs/svc/server.xml5
-rw-r--r--usr/src/lib/libshare/nfs/libshare_nfs.c4
-rw-r--r--usr/src/man/man1m/sharectl.1m6
-rw-r--r--usr/src/man/man4/nfs.46
-rw-r--r--usr/src/uts/common/rpc/svc_clts.c9
-rw-r--r--usr/src/uts/common/rpc/svc_cots.c9
-rw-r--r--usr/src/uts/common/rpc/svc_rdma.c9
10 files changed, 31 insertions, 27 deletions
diff --git a/usr/src/cmd/fs.d/nfs/lockd/lockd.c b/usr/src/cmd/fs.d/nfs/lockd/lockd.c
index 2aca35fa0f..3541ee13d0 100644
--- a/usr/src/cmd/fs.d/nfs/lockd/lockd.c
+++ b/usr/src/cmd/fs.d/nfs/lockd/lockd.c
@@ -93,7 +93,7 @@ struct lm_svc_args lmargs = {
.grace = 90,
.retransmittimeout = 5
};
-int max_servers = 20;
+int max_servers = 256;
#define RET_OK 0 /* return code for no error */
diff --git a/usr/src/cmd/fs.d/nfs/nfsd/nfsd.c b/usr/src/cmd/fs.d/nfs/nfsd/nfsd.c
index 7156178513..5c953fa833 100644
--- a/usr/src/cmd/fs.d/nfs/nfsd/nfsd.c
+++ b/usr/src/cmd/fs.d/nfs/nfsd/nfsd.c
@@ -138,7 +138,7 @@ main(int ac, char *av[])
int allflag = 0;
int df_allflag = 0;
int opt_cnt = 0;
- int maxservers = 1; /* zero allows inifinte number of threads */
+ int maxservers = 1024; /* zero allows inifinte number of threads */
int maxservers_set = 0;
int logmaxservers = 0;
int pid;
@@ -231,7 +231,7 @@ main(int ac, char *av[])
errno = 0;
maxservers = strtol(value, (char **)NULL, 10);
if (errno != 0)
- maxservers = 1;
+ maxservers = 1024;
else
maxservers_set = 1;
}
diff --git a/usr/src/cmd/fs.d/nfs/svc/nlockmgr.xml b/usr/src/cmd/fs.d/nfs/svc/nlockmgr.xml
index d669e481a6..b5165e7ad5 100644
--- a/usr/src/cmd/fs.d/nfs/svc/nlockmgr.xml
+++ b/usr/src/cmd/fs.d/nfs/svc/nlockmgr.xml
@@ -38,7 +38,7 @@
<service
name='network/nfs/nlockmgr'
type='service'
- version='1'>
+ version='2'>
<dependency name='network'
grouping='require_any'
@@ -96,7 +96,7 @@
<propval name='grace_period' type='integer' value='90'/>
<propval name='lockd_listen_backlog' type='integer' value='32'/>
<propval name='lockd_retransmit_timeout' type='integer' value='5'/>
- <propval name='lockd_servers' type='integer' value='20'/>
+ <propval name='lockd_servers' type='integer' value='256'/>
</property_group>
</instance>
<stability value='Stable' />
diff --git a/usr/src/cmd/fs.d/nfs/svc/server.xml b/usr/src/cmd/fs.d/nfs/svc/server.xml
index c963a01fcf..b379baafae 100644
--- a/usr/src/cmd/fs.d/nfs/svc/server.xml
+++ b/usr/src/cmd/fs.d/nfs/svc/server.xml
@@ -22,6 +22,7 @@
CDDL HEADER END
Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2012 by Delphix. All rights reserved.
Copyright 2014 Nexenta Systems, Inc. All rights reserved
Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
@@ -40,7 +41,7 @@
<service
name='network/nfs/server'
type='service'
- version='1'>
+ version='2'>
<dependency name='network'
grouping='require_any'
@@ -174,7 +175,7 @@
<propval name='server_delegation' type='astring' value='on'/>
<propval name='server_versmax' type='integer' value='4'/>
<propval name='server_versmin' type='integer' value='2'/>
- <propval name='servers' type='integer' value='16'/>
+ <propval name='servers' type='integer' value='1024'/>
<propval name='mountd_listen_backlog' type='integer' value='64'/>
<propval name='mountd_max_threads' type='integer' value='16'/>
</property_group>
diff --git a/usr/src/lib/libshare/nfs/libshare_nfs.c b/usr/src/lib/libshare/nfs/libshare_nfs.c
index 9f9e8b1451..a7edaf0b0a 100644
--- a/usr/src/lib/libshare/nfs/libshare_nfs.c
+++ b/usr/src/lib/libshare/nfs/libshare_nfs.c
@@ -2492,7 +2492,7 @@ struct proto_option_defs {
} proto_options[] = {
#define PROTO_OPT_NFSD_SERVERS 0
{"nfsd_servers",
- "servers", PROTO_OPT_NFSD_SERVERS, OPT_TYPE_NUMBER, 16, SVC_NFSD,
+ "servers", PROTO_OPT_NFSD_SERVERS, OPT_TYPE_NUMBER, 1024, SVC_NFSD,
1, INT32_MAX},
#define PROTO_OPT_LOCKD_LISTEN_BACKLOG 1
{"lockd_listen_backlog",
@@ -2500,7 +2500,7 @@ struct proto_option_defs {
OPT_TYPE_NUMBER, 32, SVC_LOCKD, 32, INT32_MAX},
#define PROTO_OPT_LOCKD_SERVERS 2
{"lockd_servers",
- "lockd_servers", PROTO_OPT_LOCKD_SERVERS, OPT_TYPE_NUMBER, 20,
+ "lockd_servers", PROTO_OPT_LOCKD_SERVERS, OPT_TYPE_NUMBER, 256,
SVC_LOCKD, 1, INT32_MAX},
#define PROTO_OPT_LOCKD_RETRANSMIT_TIMEOUT 3
{"lockd_retransmit_timeout",
diff --git a/usr/src/man/man1m/sharectl.1m b/usr/src/man/man1m/sharectl.1m
index e067d0959b..e754a602b4 100644
--- a/usr/src/man/man1m/sharectl.1m
+++ b/usr/src/man/man1m/sharectl.1m
@@ -18,7 +18,7 @@
.\" Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved
.\" Copyright 2016 Nexenta Systems, Inc.
.\"
-.Dd March 1, 2016
+.Dd December 16, 2016
.Dt SHARECTL 1M
.Os
.Sh NAME
@@ -140,11 +140,11 @@ The following command gets the properties for the NFS protocol.
.Bd -literal
# sharectl get nfs
lockd_listen_backlog=32
-lockd_servers=20
+lockd_servers=256
lockd_retransmit_timeout=5
grace_period=90
nfsmapid_domain=sun.com
-servers=16
+servers=1024
server_versmin=2
server_versmax=4
max_connections=-1
diff --git a/usr/src/man/man4/nfs.4 b/usr/src/man/man4/nfs.4
index fa124022d5..959bb472c7 100644
--- a/usr/src/man/man4/nfs.4
+++ b/usr/src/man/man4/nfs.4
@@ -19,7 +19,7 @@
.\" Copyright (c) 2004, Sun Microsystems, Inc. All Rights Reserved.
.\" Copyright 2016 Nexenta Systems, Inc.
.\"
-.Dd November 16, 2016
+.Dd December 16, 2016
.Dt NFS 4
.Os
.Sh NAME
@@ -140,7 +140,7 @@ Maximum number of concurrent NFS requests. Equivalent to last numeric argument
on the
.Nm nfsd
command line. The default is
-.Li 16 .
+.Li 1024 .
.It Sy lockd_listen_backlog Ns = Ns Ar num
Set connection queue length for
.Nm lockd
@@ -149,7 +149,7 @@ over a connection-oriented transport. The default and minimum value is
.It Sy lockd_servers Ns = Ns Ar num
Maximum number of concurrent
.Nm lockd
-requests. The default is 20.
+requests. The default is 256.
.It Sy lockd_retransmit_timeout Ns = Ns Ar num
Retransmit timeout, in seconds, before
.Nm lockd
diff --git a/usr/src/uts/common/rpc/svc_clts.c b/usr/src/uts/common/rpc/svc_clts.c
index 45645ac541..4c891510bc 100644
--- a/usr/src/uts/common/rpc/svc_clts.c
+++ b/usr/src/uts/common/rpc/svc_clts.c
@@ -22,6 +22,7 @@
/*
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
@@ -747,12 +748,12 @@ svc_clts_kfreeres(SVCXPRT *clone_xprt)
* to the service load so that there is likely to be a response entry
* when the first retransmission comes in.
*/
-#define MAXDUPREQS 1024
+#define MAXDUPREQS 8192
/*
* This should be appropriately scaled to MAXDUPREQS.
*/
-#define DRHASHSZ 257
+#define DRHASHSZ 2053
#if ((DRHASHSZ & (DRHASHSZ - 1)) == 0)
#define XIDHASH(xid) ((xid) & (DRHASHSZ - 1))
@@ -795,7 +796,7 @@ struct dupreq *drmru;
*/
static int
svc_clts_kdup(struct svc_req *req, caddr_t res, int size, struct dupreq **drpp,
- bool_t *dupcachedp)
+ bool_t *dupcachedp)
{
struct rpc_clts_server *stats = CLONE2STATS(req->rq_xprt);
struct dupreq *dr;
@@ -926,7 +927,7 @@ svc_clts_kdup(struct svc_req *req, caddr_t res, int size, struct dupreq **drpp,
*/
static void
svc_clts_kdupdone(struct dupreq *dr, caddr_t res, void (*dis_resfree)(),
- int size, int status)
+ int size, int status)
{
ASSERT(dr->dr_resfree == NULL);
diff --git a/usr/src/uts/common/rpc/svc_cots.c b/usr/src/uts/common/rpc/svc_cots.c
index 944e7396e6..fde51407d2 100644
--- a/usr/src/uts/common/rpc/svc_cots.c
+++ b/usr/src/uts/common/rpc/svc_cots.c
@@ -22,6 +22,7 @@
/*
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
@@ -713,12 +714,12 @@ svc_cots_kfreeres(SVCXPRT *clone_xprt)
* to the service load so that there is likely to be a response entry
* when the first retransmission comes in.
*/
-#define MAXDUPREQS 1024
+#define MAXDUPREQS 8192
/*
* This should be appropriately scaled to MAXDUPREQS.
*/
-#define DRHASHSZ 257
+#define DRHASHSZ 2053
#if ((DRHASHSZ & (DRHASHSZ - 1)) == 0)
#define XIDHASH(xid) ((xid) & (DRHASHSZ - 1))
@@ -761,7 +762,7 @@ struct dupreq *cotsdrmru;
*/
static int
svc_cots_kdup(struct svc_req *req, caddr_t res, int size, struct dupreq **drpp,
- bool_t *dupcachedp)
+ bool_t *dupcachedp)
{
struct rpc_cots_server *stats = CLONE2STATS(req->rq_xprt);
struct dupreq *dr;
@@ -897,7 +898,7 @@ svc_cots_kdup(struct svc_req *req, caddr_t res, int size, struct dupreq **drpp,
*/
static void
svc_cots_kdupdone(struct dupreq *dr, caddr_t res, void (*dis_resfree)(),
- int size, int status)
+ int size, int status)
{
ASSERT(dr->dr_resfree == NULL);
if (status == DUP_DONE) {
diff --git a/usr/src/uts/common/rpc/svc_rdma.c b/usr/src/uts/common/rpc/svc_rdma.c
index e0a0fe32d1..dda854a369 100644
--- a/usr/src/uts/common/rpc/svc_rdma.c
+++ b/usr/src/uts/common/rpc/svc_rdma.c
@@ -20,6 +20,7 @@
*/
/*
* Copyright (c) 1983, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
*/
/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
@@ -1139,12 +1140,12 @@ svc_rdma_kfreeres(SVCXPRT *clone_xprt)
* to the service load so that there is likely to be a response entry
* when the first retransmission comes in.
*/
-#define MAXDUPREQS 1024
+#define MAXDUPREQS 8192
/*
* This should be appropriately scaled to MAXDUPREQS.
*/
-#define DRHASHSZ 257
+#define DRHASHSZ 2053
#if ((DRHASHSZ & (DRHASHSZ - 1)) == 0)
#define XIDHASH(xid) ((xid) & (DRHASHSZ - 1))
@@ -1176,7 +1177,7 @@ struct dupreq *rdmadrmru;
*/
static int
svc_rdma_kdup(struct svc_req *req, caddr_t res, int size, struct dupreq **drpp,
- bool_t *dupcachedp)
+ bool_t *dupcachedp)
{
struct dupreq *dr;
uint32_t xid;
@@ -1300,7 +1301,7 @@ svc_rdma_kdup(struct svc_req *req, caddr_t res, int size, struct dupreq **drpp,
*/
static void
svc_rdma_kdupdone(struct dupreq *dr, caddr_t res, void (*dis_resfree)(),
- int size, int status)
+ int size, int status)
{
ASSERT(dr->dr_resfree == NULL);
if (status == DUP_DONE) {