Merge pull request #419 from cdburkard/patches/rt_failure_output

fix silent failures when rt cannot be assigned - will follow up on this
This commit is contained in:
lantz
2014-11-04 16:09:25 -08:00
+17 -8
View File
@@ -535,7 +535,7 @@ class Node( object ):
value may also be list or dict"""
name, value = param.items()[ 0 ]
f = getattr( self, method, None )
if not f or value is None:
if not f:
return
if type( value ) is list:
result = f( *value )
@@ -678,8 +678,14 @@ class CPULimitedHost( Host ):
# Tell mnexec to execute command in our cgroup
mncmd = [ 'mnexec', '-g', self.name,
'-da', str( self.pid ) ]
if self.sched == 'rt':
cpuTime = int( self.cgroupGet( 'rt_runtime_us', 'cpu' ) )
# if our cgroup is not given any cpu time,
# we cannot assign the RR Scheduler.
if self.sched == 'rt' and cpuTime > 0:
mncmd += [ '-r', str( self.rtprio ) ]
elif self.sched == 'rt' and cpuTime <= 0:
debug( '***error: not enough cpu time available for %s.' % self.name,
'Using cfs scheduler for subprocess\n' )
return Host.popen( self, *args, mncmd=mncmd, **kwargs )
def cleanup( self ):
@@ -730,8 +736,9 @@ class CPULimitedHost( Host ):
f: CPU bandwidth limit (fraction)
sched: 'rt' or 'cfs'
Note 'cfs' requires CONFIG_CFS_BANDWIDTH"""
# if cpu fraction is None, reset to default of 0
if not f:
return
f = -1
if not sched:
sched = self.sched
if sched == 'rt':
@@ -744,15 +751,17 @@ class CPULimitedHost( Host ):
# Reset to unlimited
quota = -1
# Set cgroup's period and quota
self.cgroupSet( pstr, period )
self.cgroupSet( qstr, quota )
setPeriod = self.cgroupSet( pstr, period )
setQuota = self.cgroupSet( qstr, quota )
if sched == 'rt':
# Set RT priority if necessary
self.chrt()
info( '(%s %d/%dus) ' % ( sched, quota, period ) )
sched = self.chrt()
info( '(%s %d/%dus) ' % ( sched, setQuota, setPeriod ) )
def setCPUs( self, cores, mems=0 ):
"Specify (real) cores that our cgroup can run on"
if not cores:
return
if type( cores ) is list:
cores = ','.join( [ str( c ) for c in cores ] )
self.cgroupSet( resource='cpuset', param='cpus',
@@ -766,7 +775,7 @@ class CPULimitedHost( Host ):
errFail( 'cgclassify -g cpuset:/%s %s' % (
self.name, self.pid ) )
def config( self, cpu=None, cores=None, **params ):
def config( self, cpu=-1, cores=None, **params ):
"""cpu: desired overall system CPU fraction
cores: (real) core(s) this host can run on
params: parameters for Node.config()"""