FIX: LXC/DOCKER exclusive CPU 91/10491/3
authorPeter Mikus <pmikus@cisco.com>
Mon, 12 Feb 2018 06:39:16 +0000 (07:39 +0100)
committerPeter Mikus <pmikus@cisco.com>
Fri, 23 Feb 2018 09:24:30 +0000 (09:24 +0000)
By default the cpuset cgroup is using exclusive CPU/MEM. When Docker
container is initialized a new cgroup /docker or /lxc is created under
cpuset parent tree. This newly created cgroup is inheriting parent
setting for cpu/mem exclusive parameter and thus cannot be overriden
within /docker or /lxc cgroup. This patch is supposed to set cpu/mem
exclusive parameter for both parent and subgroup.

Change-Id: I14b44db3f77c842756ec78aa60df7aca508d9545
Signed-off-by: Peter Mikus <pmikus@cisco.com>
resources/libraries/python/ContainerUtils.py

index b56fb0d..ed058b7 100644 (file)
@@ -357,10 +357,27 @@ class ContainerEngine(object):
     def _configure_cgroup(self, name):
         """Configure the control group associated with a container.
 
+        By default the cpuset cgroup is using exclusive CPU/MEM. When Docker
+        container is initialized a new cgroup /docker or /lxc is created under
+        cpuset parent tree. This newly created cgroup is inheriting parent
+        setting for cpu/mem exclusive parameter and thus cannot be overriden
+        within /docker or /lxc cgroup. This patch is supposed to set cpu/mem
+        exclusive parameter for both parent and subgroup.
+
         :param name: Name of cgroup.
         :type name: str
         :raises RuntimeError: If applying cgroup settings via cgset failed.
         """
+        ret, _, _ = self.container.ssh.exec_command_sudo(
+            'cgset -r cpuset.cpu_exclusive=0 /')
+        if int(ret) != 0:
+            raise RuntimeError('Failed to apply cgroup settings.')
+
+        ret, _, _ = self.container.ssh.exec_command_sudo(
+            'cgset -r cpuset.mem_exclusive=0 /')
+        if int(ret) != 0:
+            raise RuntimeError('Failed to apply cgroup settings.')
+
         ret, _, _ = self.container.ssh.exec_command_sudo(
             'cgcreate -g cpuset:/{name}'.format(name=name))
         if int(ret) != 0: