lastCpu = cpu
logger.log("CoreSched: allocating unit " + str(cpu) + " to slice " + name)
- reservations[name] = reservations.get(name,[]) + [cpu]
+ reservations[name] = reservations.get(name, []) + [cpu]
# now find a memory node to go with the cpu
if memSchedule:
if mem != None:
mems.remove(mem)
logger.log("CoreSched: allocating memory node " + str(mem) + " to slice " + name)
- mem_reservations[name] = mem_reservations.get(name,[]) + [mem]
+ mem_reservations[name] = mem_reservations.get(name, []) + [mem]
else:
logger.log("CoreSched: failed to find memory node for cpu" + str(cpu))
# note that if a reservation is [], then we don't need to add
# bestEffort cores to it, since it is bestEffort by default.
- if reservations.get(name,[]) != []:
+ if reservations.get(name, []) != []:
reservations[name] = reservations[name] + reservations["_default"]
- mem_reservations[name] = mem_reservations.get(name,[]) + mem_reservations["_default"]
+ mem_reservations[name] = mem_reservations.get(name, []) + mem_reservations["_default"]
logger.log("CoreSched: adding besteffort units to " + name + ". new units = " + str(reservations[name]))
self.reserveUnits(self.cgroup_var_name, reservations)
self.freezeUnits("freezer.state", freezeList)
def freezeUnits (self, var_name, freezeList):
- for (cgroup, freeze) in freezeList.items():
+ for (slicename, freeze) in freezeList.items():
try:
- logger.verbose("CoreSched: setting freezer for " + cgroup + " to " + freeze)
- attempts = []
-# attempts.append("/dev/cgroup/{}/var_name".format(cgroup, var_name))
- attempts.append("/sys/fs/cgroup/freezer/libvirt/lxc/{}/{}".format(cgroup, var_name))
- attempts.append("/sys/fs/cgroup/freezer/machine.slice/machine-lxc\\x2d{}.scope/{}".format(cgroup, var_name))
+ cgroup_path = cgroups.get_cgroup_path(slicename, 'freezer')
+ logger.verbose("CoreSched: setting freezer for {} to {} - path={} var={}"
+ .format(slicename,freeze, cgroup_path, var_name))
+ cgroup = os.path.join(cgroup_path, var_name)
+ if not cgroup:
+ logger.log("Warning: Could not spot 'freezer' cgroup file for slice {} - ignored".format(slicename))
+ break
+
if glo_coresched_simulate:
- for attempt in attempts: print "F", attempt
+ print "F", cgroup
else:
- ok = False
- for attempt in attempts:
- if os.path.exists(attempt):
- file(attempt, "w").write(freeze)
- ok = True
- break
- if not ok:
- logger.log("CoreSched: could not freezeUnits with {}".format(cgroup))
+ with open(cgroup, "w") as f:
+ f.write(freeze)
except Exception as e:
# the cgroup probably didn't exit...
- logger.log("CoreSched: exception while setting freeze for {} ({})".format(cgroup, e))
+ logger.log("CoreSched: exception while setting freeze for {} ({})".format(slicename, e))
def reserveUnits (self, var_name, reservations):
"""
cpus = default
if glo_coresched_simulate:
- print "R", "/dev/cgroup/" + cgroup + "/" + var_name, self.listToRange(cpus)
+ print "R", cgroup + "/" + var_name, self.listToRange(cpus)
else:
cgroups.write(cgroup, var_name, self.listToRange(cpus))
- #file("/dev/cgroup/" + cgroup + "/" + var_name, "w").write( self.listToRange(cpus) + "\n" )
def reserveDefault (self, var_name, cpus):
#if not os.path.exists("/etc/vservers/.defaults/cgroup"):
print "cpus:", x.listToRange(x.get_cpus())
print "sibling map:"
for item in x.get_cpus():
- print " ", item, ",".join([str(y) for y in x.cpu_siblings.get(item,[])])
+ print " ", item, ",".join([str(y) for y in x.cpu_siblings.get(item, [])])
print "mems:", x.listToRange(x.get_mems())
print "cpu to memory map:"
for item in x.get_mems():
- print " ", item, ",".join([str(y) for y in x.mems_map.get(item,[])])
+ print " ", item, ",".join([str(y) for y in x.mems_map.get(item, [])])
rspec_sl_test1 = {"cpu_cores": "1"}
rec_sl_test1 = {"_rspec": rspec_sl_test1}