From ebfc4d0d7220bb7042e0daefd90998c18f2b99f1 Mon Sep 17 00:00:00 2001 From: Bob Lantz Date: Tue, 13 Mar 2012 23:15:13 -0700 Subject: [PATCH] Reinstate fixLimits - complain if limits are too small. --- mininet/net.py | 2 +- mininet/util.py | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/mininet/net.py b/mininet/net.py index 91b2ef7..359b11b 100755 --- a/mininet/net.py +++ b/mininet/net.py @@ -565,7 +565,7 @@ def init(): # May want to loosen this to handle mnexec in the current dir. if not quietRun( 'which mnexec' ): raise Exception( "Could not find mnexec - check $PATH" ) - #fixLimits() + fixLimits() init.inited = True init.inited = False diff --git a/mininet/util.py b/mininet/util.py index bba525d..11e6a6d 100644 --- a/mininet/util.py +++ b/mininet/util.py @@ -1,12 +1,12 @@ "Utility functions for Mininet." from time import sleep -from resource import setrlimit, RLIMIT_NPROC, RLIMIT_NOFILE +from resource import setrlimit, getrlimit, RLIMIT_NPROC, RLIMIT_NOFILE import select from subprocess import call, check_call, Popen, PIPE, STDOUT import os -from mininet.log import error +from mininet.log import error, warn # Command execution support @@ -207,5 +207,22 @@ def makeNumeric( s ): def fixLimits(): "Fix ridiculously small resource limits." - setrlimit( RLIMIT_NPROC, ( 4096, 8192 ) ) - setrlimit( RLIMIT_NOFILE, ( 16384, 32768 ) ) + manyprocs = 8192 + manyfiles = 32768 + minprocs, maxprocs = getrlimit( RLIMIT_NPROC ) + minfiles, maxfiles = getrlimit( RLIMIT_NOFILE ) + # Root can raise limits + if os.getuid() == 0: + maxprocs = max( maxprocs, manyprocs ) + maxfiles = max( maxfiles, manyfiles ) + minprocs = min( manyprocs, maxprocs ) + minfiles = min( manyfiles, maxfiles ) + setrlimit( RLIMIT_NPROC, ( minprocs, maxprocs ) ) + setrlimit( RLIMIT_NOFILE, ( minfiles, maxfiles ) ) + nprocs = max( getrlimit( RLIMIT_NPROC ) ) + nfiles = max( getrlimit( RLIMIT_NOFILE ) ) + # Complain if limits are too low + if nprocs < manyprocs: + warn( '*** Warning: process limit is low:', nprocs, 'procs\n' ) + if nfiles < manyfiles: + warn( '*** Warning: open file limit is low:', nfiles, 'files \n' )