Merge branch 'master' of ssh://git.planet-lab.org/git/nodemanager
authorAndy Bavier <acb@cs.princeton.edu>
Wed, 24 Oct 2012 20:38:58 +0000 (15:38 -0500)
committerAndy Bavier <acb@cs.princeton.edu>
Wed, 24 Oct 2012 20:38:58 +0000 (15:38 -0500)
coresched_lxc.py
nodemanager-lib.spec
nodemanager-lxc.spec
nodemanager-vs.spec
slivermanager.py

index ff2443e..a3a9924 100644 (file)
@@ -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.
index 6aa90be..f1a9c01 100644 (file)
@@ -132,6 +132,9 @@ rm -rf $RPM_BUILD_ROOT
 /bin/sshsh
 
 %changelog
+* Thu Oct 18 2012 Scott Baker <smbaker@gmail.com> - nodemanager-2.1-11
+- Support for freezing BestEffort slices for Vicci
+
 * Wed Sep 05 2012 Andy Bavier <acb@cs.princeton.edu> - nodemanager-2.1-10
 - Change to use new vsh (wrapper for lxcsu)
 
index 6a3e4b7..7d82875 100644 (file)
@@ -58,6 +58,9 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/NodeManager/
 
 %changelog
+* Thu Oct 18 2012 Scott Baker <smbaker@gmail.com> - nodemanager-2.1-11
+- Support for freezing BestEffort slices for Vicci
+
 * Wed Sep 05 2012 Andy Bavier <acb@cs.princeton.edu> - nodemanager-2.1-10
 - Change to use new vsh (wrapper for lxcsu)
 
index a58a4e9..cc758bf 100644 (file)
@@ -58,6 +58,9 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/NodeManager/
 
 %changelog
+* Thu Oct 18 2012 Scott Baker <smbaker@gmail.com> - nodemanager-2.1-11
+- Support for freezing BestEffort slices for Vicci
+
 * Wed Sep 05 2012 Andy Bavier <acb@cs.princeton.edu> - nodemanager-2.1-10
 - Change to use new vsh (wrapper for lxcsu)
 
index 4e10b04..287ee07 100644 (file)
@@ -42,6 +42,7 @@ DEFAULT_ALLOCATION = {
     'cpu_pct': 0, # percent CPU reserved
     'cpu_share': 1, # proportional share
     'cpu_cores': "0b", # reserved cpu cores <num_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