Messages in this thread | | | Subject | Re: [RFC v6 1/5] sched: Introduce switch to enable TurboSched for task packing | From | Parth Shah <> | Date | Thu, 23 Jan 2020 12:05:51 +0530 |
| |
On 1/23/20 3:07 AM, Tim Chen wrote: > On 1/20/20 10:33 PM, Parth Shah wrote: >> Create a static key which allows to enable or disable TurboSched feature at >> runtime. >> >> This key is added in order to enable the TurboSched feature only when >> required. This helps in optimizing the scheduler fast-path when the >> TurboSched feature is disabled. >> >> Also provide get/put methods to keep track of the tasks using the >> TurboSched feature and also refcount classified background tasks. This >> allows to enable the feature on setting first task classified as background >> noise, similarly disable the feature on unsetting of such last task. >> >> Signed-off-by: Parth Shah <parth@linux.ibm.com> >> --- >> kernel/sched/core.c | 25 +++++++++++++++++++++++++ >> kernel/sched/sched.h | 12 ++++++++++++ >> 2 files changed, 37 insertions(+) >> >> diff --git a/kernel/sched/core.c b/kernel/sched/core.c >> index a9e5d157b1a5..dfbb52d66b29 100644 >> --- a/kernel/sched/core.c >> +++ b/kernel/sched/core.c >> @@ -73,6 +73,31 @@ __read_mostly int scheduler_running; >> */ >> int sysctl_sched_rt_runtime = 950000; >> >> +#ifdef CONFIG_SCHED_SMT >> +DEFINE_STATIC_KEY_FALSE(__turbo_sched_enabled); >> +static DEFINE_MUTEX(turbo_sched_lock); >> +static int turbo_sched_count; >> + >> +void turbo_sched_get(void) >> +{ >> + mutex_lock(&turbo_sched_lock); >> + if (!turbo_sched_count++) >> + static_branch_enable(&__turbo_sched_enabled); > > If you use static_branch_inc(&__turbo_sched_enabled) and > static_branch_dec(&__turbo_sched_enabled), you don't have > to define turbo_sched_count. And turbo_sched_lock is > also unnecessary as static_branch_inc/dec are atomic. >
That's a good suggestion. I will make those changes in the next version.
>> + mutex_unlock(&turbo_sched_lock); >> +} >> + >> +void turbo_sched_put(void) >> +{ >> + mutex_lock(&turbo_sched_lock); >> + if (!--turbo_sched_count) >> + static_branch_disable(&__turbo_sched_enabled); >> + mutex_unlock(&turbo_sched_lock); >> +} >> +#else >> +void turbo_sched_get(void) { return ; } >> +void turbo_sched_get(void) { return ; } > > Double definition of turbo_sched_get. > You probably meant turbo_sched_put in the second definition.
yes, my bad. I meant turbo_sched_put() instead.
Thanks, Parth
> > Tim >
| |