Cleaned up sysctl and rlimit test and set

Use files instead of sysctl to set limits
This commit is contained in:
Brian O'Connor
2013-08-14 15:04:11 -07:00
parent b20c9470c7
commit 867a6d6731
2 changed files with 28 additions and 50 deletions
+19 -42
View File
@@ -2,7 +2,7 @@
from mininet.log import output, info, error, warn 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 resource import getrlimit, setrlimit, RLIMIT_NPROC, RLIMIT_NOFILE
from select import poll, POLLIN, POLLHUP from select import poll, POLLIN, POLLHUP
from subprocess import call, check_call, Popen, PIPE, STDOUT from subprocess import call, check_call, Popen, PIPE, STDOUT
@@ -355,73 +355,50 @@ def pmonitor(popens, timeoutms=500, readline=True,
yield None, '' yield None, ''
# Other stuff we use # 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 ): 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 #read limit
oldLimit = quietRun( 'sysctl -n %s' % name ) f = open(name, 'r+')
#print name, type(limit), limit oldLimit = f.readline()
if type( limit ) is int: if type( limit ) is int:
if int( oldLimit ) < limit: # or True: #compare integer limits before overriding
#print 'set new limit:', limit if int( oldLimit ) < limit:
output = errRun( 'sysctl -w %s=%s' % ( name, limit) ) f.write("%d" % limit)
#else:
# print 'keep old limit'
else: else:
#print 'cmd:', 'sysctl', '-w', '%s=%s' % ( name, limit ) #overwrite non-integer limits
arg = '%s="%s"' % ( name, limit ) f.write(limit)
output = errRun( 'sysctl', '-w', '%s=%s' % ( name, limit ) ) f.close()
#print output
#compare to limit
# set new limit if necessary
#print 'new limit:', quietRun( 'sysctl -n %s' % name )
def rlimitTestAndSet( name, limit ): def rlimitTestAndSet( name, limit ):
#print 'old: ', name, getrlimit( name ) "Helper function to set rlimits"
#read limit
soft, hard = getrlimit( name ) soft, hard = getrlimit( name )
if soft < limit: if soft < limit:
hardLimit = hard if limit < hard else limit hardLimit = hard if limit < hard else limit
setrlimit( name, ( limit, hardLimit ) ) setrlimit( name, ( limit, hardLimit ) )
#compare to limit
# set new limit if necessary
#print 'new: ', name, getrlimit( name )
def fixLimits(): def fixLimits():
"Fix ridiculously small resource limits." "Fix ridiculously small resource limits."
start = time()
rlimitTestAndSet( RLIMIT_NPROC, 8192 ) rlimitTestAndSet( RLIMIT_NPROC, 8192 )
rlimitTestAndSet( RLIMIT_NOFILE, 16384 ) rlimitTestAndSet( RLIMIT_NOFILE, 16384 )
#Increase open file limit
sysctlTestAndSet( 'fs.file-max', 10000 ) sysctlTestAndSet( 'fs.file-max', 10000 )
#Increase network buffer space
sysctlTestAndSet( 'net.core.wmem_max', 16777216 ) sysctlTestAndSet( 'net.core.wmem_max', 16777216 )
sysctlTestAndSet( 'net.core.rmem_max', 16777216 ) sysctlTestAndSet( 'net.core.rmem_max', 16777216 )
sysctlTestAndSet( 'net.ipv4.tcp_rmem', '10240 87380 16777216' ) sysctlTestAndSet( 'net.ipv4.tcp_rmem', '10240 87380 16777216' )
sysctlTestAndSet( 'net.ipv4.tcp_wmem', '10240 87380 16777216' ) sysctlTestAndSet( 'net.ipv4.tcp_wmem', '10240 87380 16777216' )
sysctlTestAndSet( 'net.core.netdev_max_backlog', 5000 ) 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_thresh1', 4096 )
sysctlTestAndSet( 'net.ipv4.neigh.default.gc_thresh2', 8192 ) sysctlTestAndSet( 'net.ipv4.neigh.default.gc_thresh2', 8192 )
sysctlTestAndSet( 'net.ipv4.neigh.default.gc_thresh3', 16384 ) sysctlTestAndSet( 'net.ipv4.neigh.default.gc_thresh3', 16384 )
#Increase routing table size
sysctlTestAndSet( 'net.ipv4.route.max_size', 32768 ) sysctlTestAndSet( 'net.ipv4.route.max_size', 32768 )
#Increase number of PTYs for nodes
sysctlTestAndSet( 'kernel.pty.max', 20000 ) sysctlTestAndSet( 'kernel.pty.max', 20000 )
end = time()
print 'limits:', start, end, end-start
def mountCgroups(): def mountCgroups():
"Make sure cgroups file system is mounted" "Make sure cgroups file system is mounted"
+9 -8
View File
@@ -144,14 +144,15 @@ function mn_deps {
python-setuptools cgroup-bin ethtool help2man \ python-setuptools cgroup-bin ethtool help2man \
pyflakes pylint pep8 pyflakes pylint pep8
# Add sysctl parameters as noted in the INSTALL file to increase kernel # TODO: remove this; it's no longer necessary as these are check when mn starts
# limits to support larger setups: ## Add sysctl parameters as noted in the INSTALL file to increase kernel
if ! grep Mininet /etc/sysctl.conf; then ## limits to support larger setups:
echo "Adding Mininet sysctl settings" #if ! grep Mininet /etc/sysctl.conf; then
sudo su -c "cat $MININET_DIR/mininet/util/sysctl_addon >> /etc/sysctl.conf" # echo "Adding Mininet sysctl settings"
fi # sudo su -c "cat $MININET_DIR/mininet/util/sysctl_addon >> /etc/sysctl.conf"
# Load new sysctl settings: #fi
sudo sysctl -p ## Load new sysctl settings:
#sudo sysctl -p
echo "Installing Mininet core" echo "Installing Mininet core"
pushd $MININET_DIR/mininet pushd $MININET_DIR/mininet