From 867a6d67317b50f4a1c67807f1ad7cd58265f12b Mon Sep 17 00:00:00 2001 From: Brian O'Connor Date: Wed, 14 Aug 2013 15:04:11 -0700 Subject: [PATCH] Cleaned up sysctl and rlimit test and set Use files instead of sysctl to set limits --- mininet/util.py | 61 +++++++++++++++---------------------------------- util/install.sh | 17 +++++++------- 2 files changed, 28 insertions(+), 50 deletions(-) diff --git a/mininet/util.py b/mininet/util.py index 8c7e9ba..0c2b19b 100644 --- a/mininet/util.py +++ b/mininet/util.py @@ -2,7 +2,7 @@ from mininet.log import output, info, error, warn -from time import sleep, time +from time import sleep from resource import getrlimit, setrlimit, RLIMIT_NPROC, RLIMIT_NOFILE from select import poll, POLLIN, POLLHUP from subprocess import call, check_call, Popen, PIPE, STDOUT @@ -355,73 +355,50 @@ def pmonitor(popens, timeoutms=500, readline=True, yield None, '' # Other stuff we use -#PTY_LIMIT=8192 -# Mininet: Increase open file limit -#fs.file-max = 100000 - -# Mininet: increase network buffer space -#net.core.wmem_max = 16777216 -#net.core.rmem_max = 16777216 -#net.ipv4.tcp_rmem = 10240 87380 16777216 -#net.ipv4.tcp_rmem = 10240 87380 16777216 -#net.core.netdev_max_backlog = 5000 - -# Mininet: increase arp cache size -#net.ipv4.neigh.default.gc_thresh1 = 4096 -#net.ipv4.neigh.default.gc_thresh2 = 8192 -#net.ipv4.neigh.default.gc_thresh3 = 16384 - -# Mininet: increase routing table size -#net.ipv4.route.max_size=32768 - def sysctlTestAndSet( name, limit ): + "Helper function to set sysctl limits" + #convert non-directory names into directory names + if '/' not in name: + name = '/proc/sys/' + name.replace('.','/') #read limit - oldLimit = quietRun( 'sysctl -n %s' % name ) - #print name, type(limit), limit + f = open(name, 'r+') + oldLimit = f.readline() if type( limit ) is int: - if int( oldLimit ) < limit: # or True: - #print 'set new limit:', limit - output = errRun( 'sysctl -w %s=%s' % ( name, limit) ) - #else: - # print 'keep old limit' + #compare integer limits before overriding + if int( oldLimit ) < limit: + f.write("%d" % limit) else: - #print 'cmd:', 'sysctl', '-w', '%s=%s' % ( name, limit ) - arg = '%s="%s"' % ( name, limit ) - output = errRun( 'sysctl', '-w', '%s=%s' % ( name, limit ) ) - #print output - #compare to limit - # set new limit if necessary - #print 'new limit:', quietRun( 'sysctl -n %s' % name ) + #overwrite non-integer limits + f.write(limit) + f.close() def rlimitTestAndSet( name, limit ): - #print 'old: ', name, getrlimit( name ) - #read limit + "Helper function to set rlimits" soft, hard = getrlimit( name ) if soft < limit: hardLimit = hard if limit < hard else limit setrlimit( name, ( limit, hardLimit ) ) - #compare to limit - # set new limit if necessary - #print 'new: ', name, getrlimit( name ) def fixLimits(): "Fix ridiculously small resource limits." - start = time() rlimitTestAndSet( RLIMIT_NPROC, 8192 ) rlimitTestAndSet( RLIMIT_NOFILE, 16384 ) + #Increase open file limit sysctlTestAndSet( 'fs.file-max', 10000 ) + #Increase network buffer space sysctlTestAndSet( 'net.core.wmem_max', 16777216 ) sysctlTestAndSet( 'net.core.rmem_max', 16777216 ) sysctlTestAndSet( 'net.ipv4.tcp_rmem', '10240 87380 16777216' ) sysctlTestAndSet( 'net.ipv4.tcp_wmem', '10240 87380 16777216' ) sysctlTestAndSet( 'net.core.netdev_max_backlog', 5000 ) + #Increase arp cache size sysctlTestAndSet( 'net.ipv4.neigh.default.gc_thresh1', 4096 ) sysctlTestAndSet( 'net.ipv4.neigh.default.gc_thresh2', 8192 ) sysctlTestAndSet( 'net.ipv4.neigh.default.gc_thresh3', 16384 ) + #Increase routing table size sysctlTestAndSet( 'net.ipv4.route.max_size', 32768 ) + #Increase number of PTYs for nodes sysctlTestAndSet( 'kernel.pty.max', 20000 ) - end = time() - print 'limits:', start, end, end-start def mountCgroups(): "Make sure cgroups file system is mounted" diff --git a/util/install.sh b/util/install.sh index e6fdf92..5ecfc16 100755 --- a/util/install.sh +++ b/util/install.sh @@ -144,14 +144,15 @@ function mn_deps { python-setuptools cgroup-bin ethtool help2man \ pyflakes pylint pep8 - # Add sysctl parameters as noted in the INSTALL file to increase kernel - # limits to support larger setups: - if ! grep Mininet /etc/sysctl.conf; then - echo "Adding Mininet sysctl settings" - sudo su -c "cat $MININET_DIR/mininet/util/sysctl_addon >> /etc/sysctl.conf" - fi - # Load new sysctl settings: - sudo sysctl -p + # TODO: remove this; it's no longer necessary as these are check when mn starts + ## Add sysctl parameters as noted in the INSTALL file to increase kernel + ## limits to support larger setups: + #if ! grep Mininet /etc/sysctl.conf; then + # echo "Adding Mininet sysctl settings" + # sudo su -c "cat $MININET_DIR/mininet/util/sysctl_addon >> /etc/sysctl.conf" + #fi + ## Load new sysctl settings: + #sudo sysctl -p echo "Installing Mininet core" pushd $MININET_DIR/mininet