From b2ec957bf82517d73350db6d4abcea11ebcd59ad Mon Sep 17 00:00:00 2001 From: Patrick Bellasi Date: Tue, 29 Nov 2016 10:02:57 +0000 Subject: [PATCH] shutils/cgroups: fix run_into support In the previous patch: cgroups: Mount cgroups controllers in devlib working dir we changed the default mount point for devlib managed CGroups but forgot to update the support for execution of a workload within a specified CGroup. The run_into support is provide by a shutil script, which still has hardcoded the old path (i.e. /sys/fs/cgroup/devlib_*). This patch fixes this by: - resetting the default path to the Linux standard /sys/fs/cgroup - use-sing the existing CGMOUNT env variable to specify which CGroups mount point to use The cgroups::run_into is also updated to use the self.cgroup_root via CGMOUNT when the shutils' script is called. Moreover, an additional cgroups::run_into_cmd method is added which just returns a properly formatted run_into shutils' call. Signed-off-by: Patrick Bellasi --- devlib/bin/scripts/shutils.in | 2 +- devlib/module/cgroups.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/devlib/bin/scripts/shutils.in b/devlib/bin/scripts/shutils.in index 640d65d..fa4ad93 100755 --- a/devlib/bin/scripts/shutils.in +++ b/devlib/bin/scripts/shutils.in @@ -102,7 +102,7 @@ cgroups_get_attributes() { cgroups_run_into() { # Control groups mount point - CGMOUNT=${CGMOUNT:-/sys/fs/cgroup/devlib_*} + CGMOUNT=${CGMOUNT:-/sys/fs/cgroup} # The control group we want to run into CGP=${1} shift 1 diff --git a/devlib/module/cgroups.py b/devlib/module/cgroups.py index dd9543e..001867b 100644 --- a/devlib/module/cgroups.py +++ b/devlib/module/cgroups.py @@ -314,6 +314,10 @@ class CgroupsModule(Module): self.logger = logging.getLogger('CGroups') + # Set Devlib's CGroups mount point + self.cgroup_root = target.path.join( + target.working_directory, 'cgroups') + # Load list of available controllers controllers = [] subsys = self.list_subsystems() @@ -329,9 +333,7 @@ class CgroupsModule(Module): if not controller.probe(self.target): continue try: - cgroup_root = target.path.join(target.working_directory, - 'cgroups') - controller.mount(self.target, cgroup_root) + controller.mount(self.target, self.cgroup_root) except TargetError: message = 'cgroups {} controller is not supported by the target' raise TargetError(message.format(controller.kind)) @@ -359,12 +361,18 @@ class CgroupsModule(Module): return None return self.controllers[kind] + def run_into_cmd(self, cgroup, cmdline): + return 'CGMOUNT={} {} cgroups_run_into {} {}'\ + .format(self.cgroup_root, self.target.shutils, + cgroup, cmdline) + def run_into(self, cgroup, cmdline): """ Run the specified command into the specified CGroup """ return self.target._execute_util( - 'cgroups_run_into {} {}'.format(cgroup, cmdline), + 'CGMOUNT={} cgroups_run_into {} {}'\ + .format(self.cgroup_root, cgroup, cmdline), as_root=True)