lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 9 Sep 2022 16:11:44 -0700 From: Ricardo Neri <ricardo.neri-calderon@...ux.intel.com> To: "Peter Zijlstra (Intel)" <peterz@...radead.org>, Juri Lelli <juri.lelli@...hat.com>, Vincent Guittot <vincent.guittot@...aro.org> Cc: Ricardo Neri <ricardo.neri@...el.com>, "Ravi V. Shankar" <ravi.v.shankar@...el.com>, Ben Segall <bsegall@...gle.com>, Daniel Bristot de Oliveira <bristot@...hat.com>, Dietmar Eggemann <dietmar.eggemann@....com>, Len Brown <len.brown@...el.com>, Mel Gorman <mgorman@...e.de>, "Rafael J. Wysocki" <rafael.j.wysocki@...el.com>, Srinivas Pandruvada <srinivas.pandruvada@...ux.intel.com>, Steven Rostedt <rostedt@...dmis.org>, Tim Chen <tim.c.chen@...ux.intel.com>, Valentin Schneider <vschneid@...hat.com>, x86@...nel.org, linux-kernel@...r.kernel.org, Ricardo Neri <ricardo.neri-calderon@...ux.intel.com>, "Tim C . Chen" <tim.c.chen@...el.com> Subject: [RFC PATCH 02/23] sched: Add interfaces for classes of tasks Add the interfaces that architectures shall implement to convey needed data to support classes of tasks. arch_update_task_class() updates the classification of the current task as given by dedicated hardware resources. arch_get_task_class_score() provides a performance score for a given class of task when placed on a specific CPU relative to other CPUs. Higher scores indicate higher performance. The number of classes and the score of each class of task is determined by hardware. Cc: Ben Segall <bsegall@...gle.com> Cc: Daniel Bristot de Oliveira <bristot@...hat.com> Cc: Dietmar Eggemann <dietmar.eggemann@....com> Cc: Len Brown <len.brown@...el.com> Cc: Mel Gorman <mgorman@...e.de> Cc: Rafael J. Wysocki <rafael.j.wysocki@...el.com> Cc: Srinivas Pandruvada <srinivas.pandruvada@...ux.intel.com> Cc: Steven Rostedt <rostedt@...dmis.org> Cc: Tim C. Chen <tim.c.chen@...el.com> Cc: Valentin Schneider <vschneid@...hat.com> Cc: x86@...nel.org Cc: linux-kernel@...r.kernel.org Signed-off-by: Ricardo Neri <ricardo.neri-calderon@...ux.intel.com> --- kernel/sched/sched.h | 64 +++++++++++++++++++++++++++++++++++++++++ kernel/sched/topology.c | 8 ++++++ 2 files changed, 72 insertions(+) diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index e26688d387ae..719bdba660e2 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -2510,6 +2510,70 @@ void arch_scale_freq_tick(void) } #endif +#ifdef CONFIG_SCHED_TASK_CLASSES +DECLARE_STATIC_KEY_FALSE(sched_task_classes); + +static inline bool sched_task_classes_enabled(void) +{ + return static_branch_unlikely(&sched_task_classes); +} + +#ifndef arch_has_task_classes +/** + * arch_has_task_classes() - Check whether hardware supports classes of tasks + * + * Returns: true of classes of tasks are supported. + */ +static __always_inline +bool arch_has_task_classes(void) +{ + return false; +} +#endif + +#ifndef arch_update_task_class +/** + * arch_update_task_class() - Update the classification of the current task + * @curr: The current task + * @smt_siblings_idle: True if all of the SMT siblings of the CPU of @curr + * are idle. + * + * Request that the classification of @curr is updated. On certain CPUs, the + * classification is only reliable if all of the SMT siblings of the CPU of + * @curr are idle. + * + * Returns: none + */ +static __always_inline +void arch_update_task_class(struct task_struct *curr, bool smt_siblings_idle) +{ +} +#endif + +#ifndef arch_get_task_class_score +/** + * arch_get_task_class_score() - Get the priority of a class + * @class: A classification value + * @cpu: A CPU number + * + * Returns the performance score of a class of tasks when running on @cpu. + * Error when either @class or @cpu are invalid. + */ +static __always_inline +int arch_get_task_class_score(int class, int cpu) +{ + return 1; +} +#endif +#else /* CONFIG_SCHED_TASK_CLASSES */ + +#define arch_get_task_class_score(class, cpu) (-EINVAL) +#define arch_update_task_class(curr, smt_siblings_idle) + +static inline bool sched_task_classes_enabled(void) { return false; } + +#endif /* CONFIG_SCHED_TASK_CLASSES */ + #ifndef arch_scale_freq_capacity /** * arch_scale_freq_capacity - get the frequency scale factor of a given CPU. diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index 8739c2a5a54e..8d886dbe6318 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -669,6 +669,9 @@ DEFINE_PER_CPU(struct sched_domain __rcu *, sd_numa); DEFINE_PER_CPU(struct sched_domain __rcu *, sd_asym_packing); DEFINE_PER_CPU(struct sched_domain __rcu *, sd_asym_cpucapacity); DEFINE_STATIC_KEY_FALSE(sched_asym_cpucapacity); +#ifdef CONFIG_SCHED_TASK_CLASSES +DEFINE_STATIC_KEY_FALSE(sched_task_classes); +#endif static void update_top_cache_domain(int cpu) { @@ -2384,6 +2387,11 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att if (has_asym) static_branch_inc_cpuslocked(&sched_asym_cpucapacity); +#ifdef CONFIG_SCHED_TASK_CLASSES + if (arch_has_task_classes()) + static_branch_enable_cpuslocked(&sched_task_classes); +#endif + if (rq && sched_debug_verbose) { pr_info("root domain span: %*pbl (max cpu_capacity = %lu)\n", cpumask_pr_args(cpu_map), rq->rd->max_cpu_capacity); -- 2.25.1
Powered by blists - more mailing lists