diff options
author | Sebastien Roy <seb@delphix.com> | 2012-06-06 11:43:04 -0700 |
---|---|---|
committer | Dan McDonald <danmcd@omniti.com> | 2016-12-07 14:10:24 -0500 |
commit | 201f5eba35ac4c04e6a037fd065c45c6b8cb9ab1 (patch) | |
tree | db8bf2b84271f5f3ce8ae183fa40f8b4597ce831 | |
parent | d1054fda727523967470132ee7266d3d934b5124 (diff) | |
download | illumos-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.c | 2 | ||||
-rw-r--r-- | usr/src/cmd/fs.d/nfs/nfsd/nfsd.c | 4 | ||||
-rw-r--r-- | usr/src/cmd/fs.d/nfs/svc/nlockmgr.xml | 4 | ||||
-rw-r--r-- | usr/src/cmd/fs.d/nfs/svc/server.xml | 5 | ||||
-rw-r--r-- | usr/src/lib/libshare/nfs/libshare_nfs.c | 4 | ||||
-rw-r--r-- | usr/src/man/man1m/sharectl.1m | 6 | ||||
-rw-r--r-- | usr/src/man/man4/nfs.4 | 6 | ||||
-rw-r--r-- | usr/src/uts/common/rpc/svc_clts.c | 9 | ||||
-rw-r--r-- | usr/src/uts/common/rpc/svc_cots.c | 9 | ||||
-rw-r--r-- | usr/src/uts/common/rpc/svc_rdma.c | 9 |
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) { |