mirror of
https://github.com/ARM-software/devlib.git
synced 2025-01-31 10:10:46 +00:00
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>
This commit is contained in:
parent
a9ee41855d
commit
5dea9f8bcf
@ -238,6 +238,19 @@ hotplug_online_all() {
|
|||||||
done
|
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
|
# Misc
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -343,6 +356,9 @@ get_linux_system_id)
|
|||||||
get_android_system_id)
|
get_android_system_id)
|
||||||
get_android_system_id $*
|
get_android_system_id $*
|
||||||
;;
|
;;
|
||||||
|
sched_get_kernel_attributes)
|
||||||
|
sched_get_kernel_attributes $*
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Command [$CMD] not supported"
|
echo "Command [$CMD] not supported"
|
||||||
exit -1
|
exit -1
|
||||||
|
@ -253,6 +253,58 @@ class SchedModule(Module):
|
|||||||
|
|
||||||
return SchedProcFSData.available(target)
|
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):
|
def get_cpu_sd_info(self, cpu):
|
||||||
"""
|
"""
|
||||||
:returns: An object view of /proc/sys/kernel/sched_domain/cpu<cpu>/*
|
:returns: An object view of /proc/sys/kernel/sched_domain/cpu<cpu>/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user