Proposed changes for init file in nfs-utils
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 9 lines · Sean O'Connell
Hi-
I have opened a bugzilla request with the redhat regarding applying some of the recommendations from the nfs how-to performance section (chapter 5) and also adds a configuration file that lives in
/etc/sysconfigand is read in by the startup script/etc/init.d/nfs. This was based on a series of con- versations with Seth Vidal regarding ways of incorporating the performance recommendations for our servers.
Quoted 9 lines
The changes are detailed in the following bugzilla report:
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=61841
The redhat engineer suggested that since it was a feature request it was to late in the development cycle that it wouldn't make it into RH 7.3, but that it could be more easily incorporated if the next release of nfsutils if they were already in the upstream source.
I checked a slightly different patch. Please check it out and make sure I didn't break anything.
Thanks.
H.J.
---
2002-04-07 H.J. Lu <[email protected]>
* etc/redhat/nfs.init: Read /etc/sysconfig/nfsd for NFS tuning.
Index: etc/redhat/nfs.init
===================================================================
RCS file: /cvsroot/nfs/nfs-utils/etc/redhat/nfs.init,v retrieving revision 1.14
redhat/nfs.init +52 -12
@@ -8,6 +8,7 @@ # networks. This service provides NFS server functionality, \ # which is configured via the /etc/exports file. # probe: true +# config: /etc/sysconfig/nfsd # Source function library. . /etc/rc.d/init.d/functions
@@ -27,37 +28,76 @@ fi [ -x /usr/sbin/exportfs ] || exit 0 [ -s /etc/exports ] || exit 0 -RQUOTAD=`type -path rpc.rquotad` # Remote quota server +# Check for and source configuration file otherwise set defaults +# TUNE_QUEUE: controls whether to up the size of input queues +NFSDCFG=/etc/sysconfig/nfsd +if [ -f "$NFSDCFG" ]; then + # Tune nfs server settings + . "$NFSDCFG" +else + # Set some defaults + TUNE_QUEUE ="no" + # Default to NFS version 3. + RPCMOUNTDOPTS="" +fi + +# Number of servers to be started by default +[ -z "$RPCNFSDCOUNT" ] && RPCNFSDCOUNT=8 + +# Remote quota server +[ -z "$RQUOTAD" ] && RQUOTAD=`type -path rpc.rquotad` -# Number of servers to be started up by default -RPCNFSDCOUNT=8 -# Default to NFS version 3. -RPCMOUNTDOPTS="" +# Get the initial values for the input sock queues +# at the time of running the script. +if [ "$TUNE_QUEUE" = "yes" ]; then + RMEM_DEFAULT=`/sbin/sysctl -n net.core.rmem_default` + RMEM_MAX=`/sbin/sysctl -n net.core.rmem_max` + WMEM_DEFAULT=`/sbin/sysctl -n net.core.wmem_default` + WMEM_MAX=`/sbin/sysctl -n net.core.wmem_max` + # 256kb recommended minimum size based on SPECsfs NFS benchmarks + [ -z "$NFS_QS" ] && NFS_QS=262144 +fi # See how we were called. case "$1" in start) # Start daemons. + # Apply input queue increase for nfs server + if [ "$TUNE_QUEUE" = "yes" ]; then + /sbin/sysctl -w net.core.rmem_default=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.rmem_max=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.wmem_default=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.wmem_max=$NFSD_QS >/dev/null 2>&1 + fi action "Starting NFS services: " /usr/sbin/exportfs -r - if [ -n "$RQUOTAD" ]; then - echo -n "Starting NFS quotas: " - daemon rpc.rquotad - echo + if [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; then + echo -n "Starting NFS quotas: " + daemon rpc.rquotad + echo fi echo -n "Starting NFS daemon: " daemon rpc.nfsd $RPCNFSDCOUNT echo - # Let's see if we support NFS version 3. - /usr/sbin/rpcinfo -u localhost nfs 3 &>/dev/null - if [ $? -ne 0 ]; then + if [ -z "$RPCMOUNTDOPTS" ]; then + # Let's see if we support NFS version 3. + /usr/sbin/rpcinfo -u localhost nfs 3 &>/dev/null + if [ $? -ne 0 ]; then RPCMOUNTDOPTS="--no-nfs-version 3" + fi fi echo -n "Starting NFS mountd: " daemon rpc.mountd $RPCMOUNTDOPTS echo touch /var/lock/subsys/nfs + # reset input queue for rest of network services + if [ "$TUNE_QUEUE" = "yes" ]; then + /sbin/sysctl -w net.core.rmem_default=$RMEM_DEFAULT >/dev/null 2>&1 + /sbin/sysctl -w net.core.rmem_max=$RMEM_MAX >/dev/null 2>&1 + /sbin/sysctl -w net.core.wmem_default=$WMEM_DEFAULT >/dev/null 2>&1 + /sbin/sysctl -w net.core.wmem_max=$WMEM_MAX >/dev/null 2>&1 + fi ;; stop) # Stop daemons.
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs
Quoted 3 lines · On Sunday April 7, [email protected] wrote:
I checked a slightly different patch. Please check it out and make sure I didn't break anything.
...
redhat/nfs.init fi · line 71
Quoted 6 lines
redhat/nfs.init +6
-0+ if [ "$TUNE_QUEUE" = "yes" ]; then + /sbin/sysctl -w net.core.rmem_default=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.rmem_max=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.wmem_default=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.wmem_max=$NFSD_QS >/dev/null 2>&1 + fi
Though it possibly doesn't hurt, there is nothing to be gained by setting the wmem_{default,max}.
Only the rmem needs to be set. This is because nfsd doesn't take packets off the udp queue until they are completely processed, so the rmem_{default,max} needs to be big enough to hold all currently active requests.
NeilBrown
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs
Quoted 6 lines · Neil Brown
Quoted 3 lines · On Sunday April 7, [email protected] wrote:
I checked a slightly different patch. Please check it out and make sure I didn't break anything.
...
Quoted 14 lines
redhat/nfs.init fi · line 71
Quoted 6 lines
redhat/nfs.init +6
-0+ if [ "$TUNE_QUEUE" = "yes" ]; then + /sbin/sysctl -w net.core.rmem_default=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.rmem_max=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.wmem_default=$NFSD_QS >/dev/null 2>&1 + /sbin/sysctl -w net.core.wmem_max=$NFSD_QS >/dev/null 2>&1 + fiThough it possibly doesn't hurt, there is nothing to be gained by setting the wmem_{default,max}.
Only the rmem needs to be set. This is because nfsd doesn't take packets off the udp queue until they are completely processed, so the rmem_{default,max} needs to be big enough to hold all currently active requests.
I guess I don't have to tell you feel free to make any necessary changes :-).
H.J.
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs