Cleaned up sysctl and rlimit test and set
Use files instead of sysctl to set limits
This commit is contained in:
+19
-42
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user