git://git.onelab.eu
/
nodemanager.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
reguire gnupg1 on f>=31; sense the system to use gpg1 when installed
[nodemanager.git]
/
coresched_lxc.py
diff --git
a/coresched_lxc.py
b/coresched_lxc.py
index
d48e2bb
..
c6b7f4d
100644
(file)
--- a/
coresched_lxc.py
+++ b/
coresched_lxc.py
@@
-6,6
+6,7
@@
import logger
import os
import os.path
import cgroups
import os
import os.path
import cgroups
+from functools import reduce
glo_coresched_simulate = False
joinpath = os.path.join
glo_coresched_simulate = False
joinpath = os.path.join
@@
-168,7
+169,7
@@
class CoreSched:
# allocate the cores to the slivers that have them reserved
# TODO: Need to sort this from biggest cpu_cores to smallest
# allocate the cores to the slivers that have them reserved
# TODO: Need to sort this from biggest cpu_cores to smallest
- for name, rec in slivers.ite
rite
ms():
+ for name, rec in slivers.items():
rspec = rec["_rspec"]
cores = rspec.get(self.slice_attr_name, 0)
(cores, bestEffort) = self.decodeCoreSpec(cores)
rspec = rec["_rspec"]
cores = rspec.get(self.slice_attr_name, 0)
(cores, bestEffort) = self.decodeCoreSpec(cores)
@@
-185,7
+186,7
@@
class CoreSched:
lastCpu = cpu
logger.log("CoreSched: allocating unit " + str(cpu) + " to slice " + name)
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:
# now find a memory node to go with the cpu
if memSchedule:
@@
-193,7
+194,7
@@
class CoreSched:
if mem != None:
mems.remove(mem)
logger.log("CoreSched: allocating memory node " + str(mem) + " to slice " + name)
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))
else:
logger.log("CoreSched: failed to find memory node for cpu" + str(cpu))
@@
-208,7
+209,7
@@
class CoreSched:
# now check and see if any of our slices had the besteffort flag
# set
# now check and see if any of our slices had the besteffort flag
# set
- for name, rec in slivers.ite
rite
ms():
+ for name, rec in slivers.items():
rspec = rec["_rspec"]
cores = rspec.get(self.slice_attr_name, 0)
(cores, bestEffort) = self.decodeCoreSpec(cores)
rspec = rec["_rspec"]
cores = rspec.get(self.slice_attr_name, 0)
(cores, bestEffort) = self.decodeCoreSpec(cores)
@@
-226,9
+227,9
@@
class CoreSched:
# note that if a reservation is [], then we don't need to add
# bestEffort cores to it, since it is bestEffort by default.
# 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"]
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)
logger.log("CoreSched: adding besteffort units to " + name + ". new units = " + str(reservations[name]))
self.reserveUnits(self.cgroup_var_name, reservations)
@@
-238,16
+239,21
@@
class CoreSched:
self.freezeUnits("freezer.state", freezeList)
def freezeUnits (self, var_name, freezeList):
self.freezeUnits("freezer.state", freezeList)
def freezeUnits (self, var_name, freezeList):
- for (slicename, freeze) in
freezeList.items(
):
+ for (slicename, freeze) in
list(freezeList.items()
):
try:
try:
- logger.verbose("CoreSched: setting freezer for " + slicename + " to " + freeze)
cgroup_path = cgroups.get_cgroup_path(slicename, 'freezer')
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)
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:
if glo_coresched_simulate:
- print
"F", cgroup
+ print
("F", cgroup)
else:
else:
- file(cgroup, "w").write(freeze)
+ 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(slicename, e))
except Exception as e:
# the cgroup probably didn't exit...
logger.log("CoreSched: exception while setting freeze for {} ({})".format(slicename, e))
@@
-278,7
+284,7
@@
class CoreSched:
cpus = default
if glo_coresched_simulate:
cpus = default
if glo_coresched_simulate:
- print
"R", cgroup + "/" + var_name, self.listToRange(cpus
)
+ print
("R", cgroup + "/" + var_name, self.listToRange(cpus)
)
else:
cgroups.write(cgroup, var_name, self.listToRange(cpus))
else:
cgroups.write(cgroup, var_name, self.listToRange(cpus))
@@
-391,17
+397,17
@@
if __name__=="__main__":
x = CoreSched()
x = CoreSched()
- print
"cgroups:", ",".join(x.get_cgroups(
))
+ print
("cgroups:", ",".join(x.get_cgroups()
))
- print
"cpus:", x.listToRange(x.get_cpus(
))
- print
"sibling map:"
+ print
("cpus:", x.listToRange(x.get_cpus()
))
+ print
("sibling map:")
for item in x.get_cpus():
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:"
+ print
("mems:", x.listToRange(x.get_mems()
))
+ print
("cpu to memory map:")
for item in x.get_mems():
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}
rspec_sl_test1 = {"cpu_cores": "1"}
rec_sl_test1 = {"_rspec": rspec_sl_test1}