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 <patrick.bellasi@arm.com>
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_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 @@
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 @@
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 @@
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)