[libvirt] [PATCH 13/15] Move cgroup objects into virLXCControllerPtr

Daniel P. Berrange berrange at redhat.com
Tue Jul 3 15:58:52 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

Move the cgroup object into virLXCControllerPtr and rename
all the setup methods to include 'Cgroup' in their name
if appropriate

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/lxc/lxc_controller.c |  132 +++++++++++++++++++++++-----------------------
 1 file changed, 67 insertions(+), 65 deletions(-)

diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index fc350ea..05ca52a 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -130,6 +130,8 @@ struct _virLXCController {
     int monitorServerWatch;
     int monitorClientFd;
     int monitorClientWatch;
+
+    virCgroupPtr cgroup;
 };
 
 static void virLXCControllerFree(virLXCControllerPtr ctrl);
@@ -207,6 +209,8 @@ static void virLXCControllerStopInit(virLXCControllerPtr ctrl)
     virLXCControllerCloseLoopDevices(ctrl, true);
     virPidAbort(ctrl->initpid);
     ctrl->initpid = 0;
+
+    virCgroupFree(&ctrl->cgroup);
 }
 
 
@@ -487,7 +491,7 @@ cleanup:
 }
 
 #if HAVE_NUMACTL
-static int lxcSetContainerNUMAPolicy(virDomainDefPtr def)
+static int virLXCControllerSetupNUMAPolicy(virLXCControllerPtr ctrl)
 {
     nodemask_t mask;
     int mode = -1;
@@ -497,7 +501,7 @@ static int lxcSetContainerNUMAPolicy(virDomainDefPtr def)
     int maxnode = 0;
     bool warned = false;
 
-    if (!def->numatune.memory.nodemask)
+    if (!ctrl->def->numatune.memory.nodemask)
         return 0;
 
     VIR_DEBUG("Setting NUMA memory policy");
@@ -513,7 +517,7 @@ static int lxcSetContainerNUMAPolicy(virDomainDefPtr def)
     /* Convert nodemask to NUMA bitmask. */
     nodemask_zero(&mask);
     for (i = 0; i < VIR_DOMAIN_CPUMASK_LEN; i++) {
-        if (def->numatune.memory.nodemask[i]) {
+        if (ctrl->def->numatune.memory.nodemask[i]) {
             if (i > NUMA_NUM_NODES) {
                 lxcError(VIR_ERR_CONFIG_UNSUPPORTED,
                          _("Host cannot support NUMA node %d"), i);
@@ -528,7 +532,7 @@ static int lxcSetContainerNUMAPolicy(virDomainDefPtr def)
         }
     }
 
-    mode = def->numatune.memory.mode;
+    mode = ctrl->def->numatune.memory.mode;
 
     if (mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT) {
         numa_set_bind_policy(1);
@@ -567,9 +571,9 @@ cleanup:
     return ret;
 }
 #else
-static int lxcSetContainerNUMAPolicy(virDomainDefPtr def)
+static int virLXCControllerSetupNUMAPolicy(virLXCControllerPtr ctrl)
 {
-    if (def->numatune.memory.nodemask) {
+    if (ctrl->def->numatune.memory.nodemask) {
         lxcError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                  _("NUMA policy is not available on this platform"));
         return -1;
@@ -583,7 +587,7 @@ static int lxcSetContainerNUMAPolicy(virDomainDefPtr def)
 /*
  * To be run while still single threaded
  */
-static int lxcSetContainerCpuAffinity(virDomainDefPtr def)
+static int virLXCControllerSetupCpuAffinity(virLXCControllerPtr ctrl)
 {
     int i, hostcpus, maxcpu = CPU_SETSIZE;
     virNodeInfo nodeinfo;
@@ -607,11 +611,11 @@ static int lxcSetContainerCpuAffinity(virDomainDefPtr def)
         return -1;
     }
 
-    if (def->cpumask) {
+    if (ctrl->def->cpumask) {
         /* XXX why don't we keep 'cpumask' in the libvirt cpumap
          * format to start with ?!?! */
-        for (i = 0 ; i < maxcpu && i < def->cpumasklen ; i++)
-            if (def->cpumask[i])
+        for (i = 0 ; i < maxcpu && i < ctrl->def->cpumasklen ; i++)
+            if (ctrl->def->cpumask[i])
                 VIR_USE_CPU(cpumap, i);
     } else {
         /* You may think this is redundant, but we can't assume libvirtd
@@ -637,33 +641,33 @@ static int lxcSetContainerCpuAffinity(virDomainDefPtr def)
 }
 
 
-static int lxcSetContainerCpuTune(virCgroupPtr cgroup, virDomainDefPtr def)
+static int virLXCControllerSetupCgroupsCpuTune(virLXCControllerPtr ctrl)
 {
     int ret = -1;
-    if (def->cputune.shares != 0) {
-        int rc = virCgroupSetCpuShares(cgroup, def->cputune.shares);
+    if (ctrl->def->cputune.shares != 0) {
+        int rc = virCgroupSetCpuShares(ctrl->cgroup, ctrl->def->cputune.shares);
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to set io cpu shares for domain %s"),
-                                 def->name);
+                                 ctrl->def->name);
             goto cleanup;
         }
     }
-    if (def->cputune.quota != 0) {
-        int rc = virCgroupSetCpuCfsQuota(cgroup, def->cputune.quota);
+    if (ctrl->def->cputune.quota != 0) {
+        int rc = virCgroupSetCpuCfsQuota(ctrl->cgroup, ctrl->def->cputune.quota);
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to set io cpu quota for domain %s"),
-                                 def->name);
+                                 ctrl->def->name);
             goto cleanup;
         }
     }
-    if (def->cputune.period != 0) {
-        int rc = virCgroupSetCpuCfsPeriod(cgroup, def->cputune.period);
+    if (ctrl->def->cputune.period != 0) {
+        int rc = virCgroupSetCpuCfsPeriod(ctrl->cgroup, ctrl->def->cputune.period);
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to set io cpu period for domain %s"),
-                                 def->name);
+                                 ctrl->def->name);
             goto cleanup;
         }
     }
@@ -673,16 +677,16 @@ cleanup:
 }
 
 
-static int lxcSetContainerBlkioTune(virCgroupPtr cgroup, virDomainDefPtr def)
+static int virLXCControllerSetupCgroupsBlkioTune(virLXCControllerPtr ctrl)
 {
     int ret = -1;
 
-    if (def->blkio.weight) {
-        int rc = virCgroupSetBlkioWeight(cgroup, def->blkio.weight);
+    if (ctrl->def->blkio.weight) {
+        int rc = virCgroupSetBlkioWeight(ctrl->cgroup, ctrl->def->blkio.weight);
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to set Blkio weight for domain %s"),
-                                 def->name);
+                                 ctrl->def->name);
             goto cleanup;
         }
     }
@@ -693,45 +697,45 @@ cleanup:
 }
 
 
-static int lxcSetContainerMemTune(virCgroupPtr cgroup, virDomainDefPtr def)
+static int virLXCControllerSetupCgroupsMemTune(virLXCControllerPtr ctrl)
 {
     int ret = -1;
     int rc;
 
-    rc = virCgroupSetMemory(cgroup, def->mem.max_balloon);
+    rc = virCgroupSetMemory(ctrl->cgroup, ctrl->def->mem.max_balloon);
     if (rc != 0) {
         virReportSystemError(-rc,
                              _("Unable to set memory limit for domain %s"),
-                             def->name);
+                             ctrl->def->name);
         goto cleanup;
     }
 
-    if (def->mem.hard_limit) {
-        rc = virCgroupSetMemoryHardLimit(cgroup, def->mem.hard_limit);
+    if (ctrl->def->mem.hard_limit) {
+        rc = virCgroupSetMemoryHardLimit(ctrl->cgroup, ctrl->def->mem.hard_limit);
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to set memory hard limit for domain %s"),
-                                 def->name);
+                                 ctrl->def->name);
             goto cleanup;
         }
     }
 
-    if (def->mem.soft_limit) {
-        rc = virCgroupSetMemorySoftLimit(cgroup, def->mem.soft_limit);
+    if (ctrl->def->mem.soft_limit) {
+        rc = virCgroupSetMemorySoftLimit(ctrl->cgroup, ctrl->def->mem.soft_limit);
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to set memory soft limit for domain %s"),
-                                 def->name);
+                                 ctrl->def->name);
             goto cleanup;
         }
     }
 
-    if (def->mem.swap_hard_limit) {
-        rc = virCgroupSetMemSwapHardLimit(cgroup, def->mem.swap_hard_limit);
+    if (ctrl->def->mem.swap_hard_limit) {
+        rc = virCgroupSetMemSwapHardLimit(ctrl->cgroup, ctrl->def->mem.swap_hard_limit);
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to set swap hard limit for domain %s"),
-                                 def->name);
+                                 ctrl->def->name);
             goto cleanup;
         }
     }
@@ -742,7 +746,7 @@ cleanup:
 }
 
 
-static int lxcSetContainerDeviceACL(virCgroupPtr cgroup, virDomainDefPtr def)
+static int virLXCControllerSetupCgroupsDeviceACL(virLXCControllerPtr ctrl)
 {
     int ret = -1;
     int rc;
@@ -757,17 +761,17 @@ static int lxcSetContainerDeviceACL(virCgroupPtr cgroup, virDomainDefPtr def)
         {'c', LXC_DEV_MAJ_TTY, LXC_DEV_MIN_PTMX},
         {0,   0, 0}};
 
-    rc = virCgroupDenyAllDevices(cgroup);
+    rc = virCgroupDenyAllDevices(ctrl->cgroup);
     if (rc != 0) {
         virReportSystemError(-rc,
                              _("Unable to deny devices for domain %s"),
-                             def->name);
+                             ctrl->def->name);
         goto cleanup;
     }
 
     for (i = 0; devices[i].type != 0; i++) {
         const struct cgroup_device_policy *dev = &devices[i];
-        rc = virCgroupAllowDevice(cgroup,
+        rc = virCgroupAllowDevice(ctrl->cgroup,
                                   dev->type,
                                   dev->major,
                                   dev->minor,
@@ -775,34 +779,34 @@ static int lxcSetContainerDeviceACL(virCgroupPtr cgroup, virDomainDefPtr def)
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to allow device %c:%d:%d for domain %s"),
-                                 dev->type, dev->major, dev->minor, def->name);
+                                 dev->type, dev->major, dev->minor, ctrl->def->name);
             goto cleanup;
         }
     }
 
-    for (i = 0 ; i < def->nfss ; i++) {
-        if (def->fss[i]->type != VIR_DOMAIN_FS_TYPE_BLOCK)
+    for (i = 0 ; i < ctrl->def->nfss ; i++) {
+        if (ctrl->def->fss[i]->type != VIR_DOMAIN_FS_TYPE_BLOCK)
             continue;
 
-        rc = virCgroupAllowDevicePath(cgroup,
-                                      def->fss[i]->src,
-                                      def->fss[i]->readonly ?
+        rc = virCgroupAllowDevicePath(ctrl->cgroup,
+                                      ctrl->def->fss[i]->src,
+                                      ctrl->def->fss[i]->readonly ?
                                       VIR_CGROUP_DEVICE_READ :
                                       VIR_CGROUP_DEVICE_RW);
         if (rc != 0) {
             virReportSystemError(-rc,
                                  _("Unable to allow device %s for domain %s"),
-                                 def->fss[i]->src, def->name);
+                                 ctrl->def->fss[i]->src, ctrl->def->name);
             goto cleanup;
         }
     }
 
-    rc = virCgroupAllowDeviceMajor(cgroup, 'c', LXC_DEV_MAJ_PTY,
+    rc = virCgroupAllowDeviceMajor(ctrl->cgroup, 'c', LXC_DEV_MAJ_PTY,
                                    VIR_CGROUP_DEVICE_RWM);
     if (rc != 0) {
         virReportSystemError(-rc,
                              _("Unable to allow PTY devices for domain %s"),
-                             def->name);
+                             ctrl->def->name);
         goto cleanup;
     }
 
@@ -813,24 +817,23 @@ cleanup:
 
 
 /**
- * lxcSetContainerResources
- * @def: pointer to virtual machine structure
+ * virLXCControllerSetupResourceLimits
+ * @ctrl: the controller state
  *
  * Creates a cgroup for the container, moves the task inside,
  * and sets resource limits
  *
  * Returns 0 on success or -1 in case of error
  */
-static int lxcSetContainerResources(virDomainDefPtr def)
+static int virLXCControllerSetupResourceLimits(virLXCControllerPtr ctrl)
 {
     virCgroupPtr driver;
-    virCgroupPtr cgroup;
     int rc = -1;
 
-    if (lxcSetContainerCpuAffinity(def) < 0)
+    if (virLXCControllerSetupCpuAffinity(ctrl) < 0)
         return -1;
 
-    if (lxcSetContainerNUMAPolicy(def) < 0)
+    if (virLXCControllerSetupNUMAPolicy(ctrl) < 0)
         return -1;
 
     rc = virCgroupForDriver("lxc", &driver, 1, 0);
@@ -844,36 +847,35 @@ static int lxcSetContainerResources(virDomainDefPtr def)
         return rc;
     }
 
-    rc = virCgroupForDomain(driver, def->name, &cgroup, 1);
+    rc = virCgroupForDomain(driver, ctrl->def->name, &ctrl->cgroup, 1);
     if (rc != 0) {
         virReportSystemError(-rc,
                              _("Unable to create cgroup for domain %s"),
-                             def->name);
+                             ctrl->def->name);
         goto cleanup;
     }
 
-    if (lxcSetContainerCpuTune(cgroup, def) < 0)
+    if (virLXCControllerSetupCgroupsCpuTune(ctrl) < 0)
         goto cleanup;
 
-    if (lxcSetContainerBlkioTune(cgroup, def) < 0)
+    if (virLXCControllerSetupCgroupsBlkioTune(ctrl) < 0)
         goto cleanup;
 
-    if (lxcSetContainerMemTune(cgroup, def) < 0)
+    if (virLXCControllerSetupCgroupsMemTune(ctrl) < 0)
         goto cleanup;
 
-    if (lxcSetContainerDeviceACL(cgroup, def) < 0)
+    if (virLXCControllerSetupCgroupsDeviceACL(ctrl) < 0)
         goto cleanup;
 
-    rc = virCgroupAddTask(cgroup, getpid());
+    rc = virCgroupAddTask(ctrl->cgroup, getpid());
     if (rc != 0) {
         virReportSystemError(-rc,
                              _("Unable to add task %d to cgroup for domain %s"),
-                             getpid(), def->name);
+                             getpid(), ctrl->def->name);
     }
 
 cleanup:
     virCgroupFree(&driver);
-    virCgroupFree(&cgroup);
 
     return rc;
 }
@@ -1716,7 +1718,7 @@ virLXCControllerRun(virLXCControllerPtr ctrl)
     if (virLXCControllerSetupLoopDevices(ctrl) < 0)
         goto cleanup;
 
-    if (lxcSetContainerResources(ctrl->def) < 0)
+    if (virLXCControllerSetupResourceLimits(ctrl) < 0)
         goto cleanup;
 
     if (virLXCControllerSetupDevPTS(ctrl) < 0)
-- 
1.7.10.4




More information about the libvir-list mailing list