From: Andy Bavier Date: Wed, 24 Oct 2012 20:38:58 +0000 (-0500) Subject: Merge branch 'master' of ssh://git.planet-lab.org/git/nodemanager X-Git-Tag: nodemanager-2.1-12~1 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=723c15893937e6350c620f63073a691e5a447a6a;hp=d0c6effcab2aa1baed6016bd7edd1339639a1d13;p=nodemanager.git Merge branch 'master' of ssh://git.planet-lab.org/git/nodemanager --- diff --git a/coresched_lxc.py b/coresched_lxc.py index ff2443e..a3a9924 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,13 @@ class CoreSched: cores = rspec.get(self.slice_attr_name, 0) (cores, bestEffort) = self.decodeCoreSpec(cores) + freezable = rspec.get("cpu_freezable", 0) + logger.log("CoreSched: " + str(name) + " " + str(freezable) + " " + str(type(freezable)) + " " + str(cores) + " " + str(type(cores))) + 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 +229,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. diff --git a/nodemanager-lib.spec b/nodemanager-lib.spec index 6aa90be..f1a9c01 100644 --- a/nodemanager-lib.spec +++ b/nodemanager-lib.spec @@ -132,6 +132,9 @@ rm -rf $RPM_BUILD_ROOT /bin/sshsh %changelog +* Thu Oct 18 2012 Scott Baker - nodemanager-2.1-11 +- Support for freezing BestEffort slices for Vicci + * Wed Sep 05 2012 Andy Bavier - nodemanager-2.1-10 - Change to use new vsh (wrapper for lxcsu) diff --git a/nodemanager-lxc.spec b/nodemanager-lxc.spec index 6a3e4b7..7d82875 100644 --- a/nodemanager-lxc.spec +++ b/nodemanager-lxc.spec @@ -58,6 +58,9 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/NodeManager/ %changelog +* Thu Oct 18 2012 Scott Baker - nodemanager-2.1-11 +- Support for freezing BestEffort slices for Vicci + * Wed Sep 05 2012 Andy Bavier - nodemanager-2.1-10 - Change to use new vsh (wrapper for lxcsu) diff --git a/nodemanager-vs.spec b/nodemanager-vs.spec index a58a4e9..cc758bf 100644 --- a/nodemanager-vs.spec +++ b/nodemanager-vs.spec @@ -58,6 +58,9 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/NodeManager/ %changelog +* Thu Oct 18 2012 Scott Baker - nodemanager-2.1-11 +- Support for freezing BestEffort slices for Vicci + * Wed Sep 05 2012 Andy Bavier - nodemanager-2.1-10 - Change to use new vsh (wrapper for lxcsu) diff --git a/slivermanager.py b/slivermanager.py index 4e10b04..287ee07 100644 --- a/slivermanager.py +++ b/slivermanager.py @@ -42,6 +42,7 @@ DEFAULT_ALLOCATION = { 'cpu_pct': 0, # percent CPU reserved 'cpu_share': 1, # proportional share 'cpu_cores': "0b", # reserved cpu cores [b] + 'cpu_freezable': 0, # freeze processes if cpu_cores is 0 # bandwidth parameters 'net_min_rate': bwmin / 1000, # kbps 'net_max_rate': bwmax / 1000, # kbps