X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=coresched_lxc.py;h=272eb62bca4a7258447e73502a0e2a05ee7f26bc;hb=refs%2Fheads%2Fpackaging;hp=ff2443e357fd6bb487b267fa6fdeaee4e29874eb;hpb=dd274713d7098ab54c81516d67d700c53fc01e56;p=nodemanager.git diff --git a/coresched_lxc.py b/coresched_lxc.py index ff2443e..272eb62 100644 --- a/coresched_lxc.py +++ b/coresched_lxc.py @@ -197,6 +197,8 @@ class CoreSched: reservations["_default"] = cpus[:] mem_reservations["_default"] = mems[:] + freezeList = {} + # now check and see if any of our slices had the besteffort flag # set for name, rec in slivers.iteritems(): @@ -204,6 +206,12 @@ class CoreSched: cores = rspec.get(self.slice_attr_name, 0) (cores, bestEffort) = self.decodeCoreSpec(cores) + freezable = rspec.get("cpu_freezable", 0) + if (cores==0) and (freezable == 1): + freezeList[name] = "FROZEN" + else: + freezeList[name] = "THAWED" + # if the bestEffort flag isn't set then we have nothing to do if not bestEffort: continue @@ -220,6 +228,21 @@ class CoreSched: self.reserveUnits(self.cgroup_mem_name, mem_reservations) + self.freezeUnits("freezer.state", freezeList) + + def freezeUnits (self, var_name, freezeList): + for (cgroup, freeze) in freezeList.items(): + try: + logger.log("CoreSched: setting freezer for " + cgroup + " to " + freeze) + if glo_coresched_simulate: + print "F", "/dev/cgroup/" + cgroup + "/" + var_name, freeze + else: + #file("/dev/cgroup/" + cgroup + "/" + var_name, "w").write(freeze) + file("/sys/fs/cgroup/freezer/libvirt/lxc/" + cgroup + "/" + var_name, "w").write(freeze) + except: + # the cgroup probably didn't exit... + logger.log("CoreSched: exception while setting freeze for " + cgroup) + def reserveUnits (self, var_name, reservations): """ give a set of reservations (dictionary of slicename:cpuid_list), write those reservations to the appropriate cgroup files.