From 5dea9f8bcfefc3fc929a11f773ac682fe197411e Mon Sep 17 00:00:00 2001 From: Patrick Bellasi <patrick.bellasi@arm.com> Date: Fri, 15 Jun 2018 12:22:05 +0100 Subject: [PATCH] module: sched: add get/set methods for scheduler attributes The Linux scheduler exposes a set of tunables via /proc/sys/kernel's attributes staring by "sched_". Let's add a convenient API to the sched module to read and set the values of these attributes. Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com> --- devlib/bin/scripts/shutils.in | 16 +++++++++++ devlib/module/sched.py | 52 +++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/devlib/bin/scripts/shutils.in b/devlib/bin/scripts/shutils.in index eba9d2d..35213ef 100755 --- a/devlib/bin/scripts/shutils.in +++ b/devlib/bin/scripts/shutils.in @@ -238,6 +238,19 @@ hotplug_online_all() { done } + +################################################################################ +# Scheduler +################################################################################ + +sched_get_kernel_attributes() { + MATCH=${1:-'.*'} + [ -d /proc/sys/kernel/ ] || exit 1 + $GREP '' /proc/sys/kernel/sched_* | \ + $SED -e 's|/proc/sys/kernel/sched_||' | \ + $GREP -e "$MATCH" +} + ################################################################################ # Misc ################################################################################ @@ -343,6 +356,9 @@ get_linux_system_id) get_android_system_id) get_android_system_id $* ;; +sched_get_kernel_attributes) + sched_get_kernel_attributes $* + ;; *) echo "Command [$CMD] not supported" exit -1 diff --git a/devlib/module/sched.py b/devlib/module/sched.py index c391c01..a719dcf 100644 --- a/devlib/module/sched.py +++ b/devlib/module/sched.py @@ -253,6 +253,58 @@ class SchedModule(Module): return SchedProcFSData.available(target) + def get_kernel_attributes(self, matching=None, check_exit_code=True): + """ + Get the value of scheduler attributes. + + :param matching: an (optional) substring to filter the scheduler + attributes to be returned. + + The scheduler exposes a list of tunable attributes under: + /proc/sys/kernel + all starting with the "sched_" prefix. + + This method returns a dictionary of all the "sched_" attributes exposed + by the target kernel, within the prefix removed. + It's possible to restrict the list of attributes by specifying a + substring to be matched. + + returns: a dictionary of scheduler tunables + """ + command = 'sched_get_kernel_attributes {}'.format( + matching if matching else '' + ) + output = self.target._execute_util(command, as_root=self.target.is_rooted, + check_exit_code=check_exit_code) + result = {} + for entry in output.strip().split('\n'): + if ':' not in entry: + continue + path, value = entry.strip().split(':', 1) + if value in ['0', '1']: + value = bool(int(value)) + elif value.isdigit(): + value = int(value) + result[path] = value + return result + + def set_kernel_attribute(self, attr, value, verify=True): + """ + Set the value of a scheduler attribute. + + :param attr: the attribute to set, without the "sched_" prefix + :param value: the value to set + :param verify: true to check that the requested value has been set + + :raise TargetError: if the attribute cannot be set + """ + if isinstance(value, bool): + value = '1' if value else '0' + elif isinstance(value, int): + value = str(value) + path = '/proc/sys/kernel/sched_' + attr + self.target.write_value(path, value, verify) + def get_cpu_sd_info(self, cpu): """ :returns: An object view of /proc/sys/kernel/sched_domain/cpu<cpu>/*