The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH 0/2] Fix SCHED_IDLE behavior on wakeup preemption
@ 2025-02-21 11:12 Abel Wu
  2025-02-21 11:12 ` [PATCH 1/2] sched/fair: Do not let idle entities preempt others Abel Wu
  2025-02-21 11:12 ` [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION Abel Wu
  0 siblings, 2 replies; 22+ messages in thread
From: Abel Wu @ 2025-02-21 11:12 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, Tianchen Ding
  Cc: Abel Wu, open list:SCHEDULER

Patch 1: Fixes unintended gap between SCHED_IDLE tasks and entities.
Patch 2: Fixes scope of WAKEUP_PREEMPTION to meet SCHED_IDLE semantics.

Abel Wu (2):
  sched/fair: Do not let idle entities preempt others
  sched/fair: Fix premature check of WAKEUP_PREEMPTION

 kernel/sched/fair.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

-- 
2.37.3


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH 1/2] sched/fair: Do not let idle entities preempt others
  2025-02-21 11:12 [PATCH 0/2] Fix SCHED_IDLE behavior on wakeup preemption Abel Wu
@ 2025-02-21 11:12 ` Abel Wu
  2025-02-21 11:48   ` Vincent Guittot
                     ` (3 more replies)
  2025-02-21 11:12 ` [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION Abel Wu
  1 sibling, 4 replies; 22+ messages in thread
From: Abel Wu @ 2025-02-21 11:12 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, Tianchen Ding
  Cc: Abel Wu, open list:SCHEDULER

A task with SCHED_IDLE policy doesn't preempt others by definition, and
the semantics are intended to be preserved when extending to cgroups
introduced in commit 304000390f88 ("sched: Cgroup SCHED_IDLE support").

But current implementation allows idle entities to preempt each other
on wakeup, which seems not behave as expected especially after
commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
so fix this by explicitly skip wakeup preemption for idle entities.

Fixes: 304000390f88 ("sched: Cgroup SCHED_IDLE support")
Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>
---
 kernel/sched/fair.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 1c0ef435a7aa..4340178f29b7 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -8778,12 +8778,15 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
 	pse_is_idle = se_is_idle(pse);
 
 	/*
-	 * Preempt an idle entity in favor of a non-idle entity (and don't preempt
-	 * in the inverse case).
+	 * Preempt an idle entity in favor of a non-idle entity.
 	 */
 	if (cse_is_idle && !pse_is_idle)
 		goto preempt;
-	if (cse_is_idle != pse_is_idle)
+
+	/*
+	 * IDLE entities do not preempt others.
+	 */
+	if (unlikely(pse_is_idle))
 		return;
 
 	/*
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-21 11:12 [PATCH 0/2] Fix SCHED_IDLE behavior on wakeup preemption Abel Wu
  2025-02-21 11:12 ` [PATCH 1/2] sched/fair: Do not let idle entities preempt others Abel Wu
@ 2025-02-21 11:12 ` Abel Wu
  2025-02-21 11:49   ` Vincent Guittot
  1 sibling, 1 reply; 22+ messages in thread
From: Abel Wu @ 2025-02-21 11:12 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, Tianchen Ding
  Cc: Abel Wu, open list:SCHEDULER

Idle tasks are by definition preempted by non-idle tasks whether feat
WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
which gives priority to WAKEUP_PREEMPTION, so when !FAIR_GROUP_SCHED,
SCHED_IDLE tasks do not preempt by non-idle tasks.

Fixes: faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>
---
 kernel/sched/fair.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 4340178f29b7..de9a2689de9c 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -8768,9 +8768,6 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
 	if (test_tsk_need_resched(rq->curr))
 		return;
 
-	if (!sched_feat(WAKEUP_PREEMPTION))
-		return;
-
 	find_matching_se(&se, &pse);
 	WARN_ON_ONCE(!pse);
 
@@ -8783,6 +8780,9 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
 	if (cse_is_idle && !pse_is_idle)
 		goto preempt;
 
+	if (!sched_feat(WAKEUP_PREEMPTION))
+		return;
+
 	/*
 	 * IDLE entities do not preempt others.
 	 */
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/2] sched/fair: Do not let idle entities preempt others
  2025-02-21 11:12 ` [PATCH 1/2] sched/fair: Do not let idle entities preempt others Abel Wu
@ 2025-02-21 11:48   ` Vincent Guittot
  2025-02-21 19:54   ` Josh Don
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 22+ messages in thread
From: Vincent Guittot @ 2025-02-21 11:48 UTC (permalink / raw)
  To: Abel Wu
  Cc: Ingo Molnar, Peter Zijlstra, Juri Lelli, Dietmar Eggemann,
	Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider,
	Josh Don, Tianchen Ding, open list:SCHEDULER

On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
>
> A task with SCHED_IDLE policy doesn't preempt others by definition, and
> the semantics are intended to be preserved when extending to cgroups
> introduced in commit 304000390f88 ("sched: Cgroup SCHED_IDLE support").
>
> But current implementation allows idle entities to preempt each other
> on wakeup, which seems not behave as expected especially after
> commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
> so fix this by explicitly skip wakeup preemption for idle entities.
>
> Fixes: 304000390f88 ("sched: Cgroup SCHED_IDLE support")
> Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>
> ---
>  kernel/sched/fair.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 1c0ef435a7aa..4340178f29b7 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -8778,12 +8778,15 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
>         pse_is_idle = se_is_idle(pse);
>
>         /*
> -        * Preempt an idle entity in favor of a non-idle entity (and don't preempt
> -        * in the inverse case).
> +        * Preempt an idle entity in favor of a non-idle entity.
>          */
>         if (cse_is_idle && !pse_is_idle)
>                 goto preempt;
> -       if (cse_is_idle != pse_is_idle)
> +
> +       /*
> +        * IDLE entities do not preempt others.
> +        */
> +       if (unlikely(pse_is_idle))
>                 return;

Fair enough

Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>

>
>         /*

> --
> 2.37.3
>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-21 11:12 ` [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION Abel Wu
@ 2025-02-21 11:49   ` Vincent Guittot
  2025-02-21 15:57     ` Abel Wu
  0 siblings, 1 reply; 22+ messages in thread
From: Vincent Guittot @ 2025-02-21 11:49 UTC (permalink / raw)
  To: Abel Wu
  Cc: Ingo Molnar, Peter Zijlstra, Juri Lelli, Dietmar Eggemann,
	Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider,
	Josh Don, Tianchen Ding, open list:SCHEDULER

On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
>
> Idle tasks are by definition preempted by non-idle tasks whether feat
> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since

I don't think it's true, only "sched_idle never preempts others" is
always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
others at wakeup, idle, batch or normal


> commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
> which gives priority to WAKEUP_PREEMPTION, so when !FAIR_GROUP_SCHED,
> SCHED_IDLE tasks do not preempt by non-idle tasks.
>
> Fixes: faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
> Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>
> ---
>  kernel/sched/fair.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 4340178f29b7..de9a2689de9c 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -8768,9 +8768,6 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
>         if (test_tsk_need_resched(rq->curr))
>                 return;
>
> -       if (!sched_feat(WAKEUP_PREEMPTION))
> -               return;
> -
>         find_matching_se(&se, &pse);
>         WARN_ON_ONCE(!pse);
>
> @@ -8783,6 +8780,9 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
>         if (cse_is_idle && !pse_is_idle)
>                 goto preempt;
>
> +       if (!sched_feat(WAKEUP_PREEMPTION))
> +               return;
> +
>         /*
>          * IDLE entities do not preempt others.
>          */
> --
> 2.37.3
>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-21 11:49   ` Vincent Guittot
@ 2025-02-21 15:57     ` Abel Wu
  2025-02-22 18:16       ` Madadi Vineeth Reddy
  0 siblings, 1 reply; 22+ messages in thread
From: Abel Wu @ 2025-02-21 15:57 UTC (permalink / raw)
  To: Vincent Guittot
  Cc: Ingo Molnar, Peter Zijlstra, Juri Lelli, Dietmar Eggemann,
	Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider,
	Josh Don, Tianchen Ding, open list:SCHEDULER

On 2/21/25 7:49 PM, Vincent Guittot Wrote:
> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
>>
>> Idle tasks are by definition preempted by non-idle tasks whether feat
>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
> 
> I don't think it's true, only "sched_idle never preempts others" is
> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
> others at wakeup, idle, batch or normal

Hi Vincent, thanks for your comment!

The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
which said:

	- no SCHED_IDLE buddies
	- never let SCHED_IDLE preempt on wakeup
	- always preempt SCHED_IDLE on wakeup
	- limit SLEEPER fairness for SCHED_IDLE

and that commit let it be preempted before checking WAKEUP_PREEMPTION.
The rules were introduced in 2009, and to the best of my knowledge there
seemed no behavior change ever since. Please correct me if I missed
anything.

Best Regards,
	Abel


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/2] sched/fair: Do not let idle entities preempt others
  2025-02-21 11:12 ` [PATCH 1/2] sched/fair: Do not let idle entities preempt others Abel Wu
  2025-02-21 11:48   ` Vincent Guittot
@ 2025-02-21 19:54   ` Josh Don
  2025-02-22 17:12   ` Madadi Vineeth Reddy
  2025-02-22 17:48   ` Madadi Vineeth Reddy
  3 siblings, 0 replies; 22+ messages in thread
From: Josh Don @ 2025-02-21 19:54 UTC (permalink / raw)
  To: Abel Wu
  Cc: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Tianchen Ding, open list:SCHEDULER

On Fri, Feb 21, 2025 at 3:12 AM Abel Wu <wuyun.abel@bytedance.com> wrote:
>
> A task with SCHED_IDLE policy doesn't preempt others by definition, and
> the semantics are intended to be preserved when extending to cgroups
> introduced in commit 304000390f88 ("sched: Cgroup SCHED_IDLE support").
>
> But current implementation allows idle entities to preempt each other
> on wakeup, which seems not behave as expected especially after
> commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
> so fix this by explicitly skip wakeup preemption for idle entities.

Thanks, looks good to me.

Reviewed-by: Josh Don <joshdon@google.com>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/2] sched/fair: Do not let idle entities preempt others
  2025-02-21 11:12 ` [PATCH 1/2] sched/fair: Do not let idle entities preempt others Abel Wu
  2025-02-21 11:48   ` Vincent Guittot
  2025-02-21 19:54   ` Josh Don
@ 2025-02-22 17:12   ` Madadi Vineeth Reddy
  2025-02-22 17:48   ` Madadi Vineeth Reddy
  3 siblings, 0 replies; 22+ messages in thread
From: Madadi Vineeth Reddy @ 2025-02-22 17:12 UTC (permalink / raw)
  To: Abel Wu
  Cc: open list:SCHEDULER, Ingo Molnar, Peter Zijlstra, Juri Lelli,
	Vincent Guittot, Dietmar Eggemann, Steven Rostedt, Ben Segall,
	Mel Gorman, Valentin Schneider, Josh Don, Tianchen Ding,
	Madadi Vineeth Reddy

Hi Abel,

On 21/02/25 16:42, Abel Wu wrote:
> A task with SCHED_IDLE policy doesn't preempt others by definition, and
> the semantics are intended to be preserved when extending to cgroups
> introduced in commit 304000390f88 ("sched: Cgroup SCHED_IDLE support").
> 
> But current implementation allows idle entities to preempt each other
> on wakeup, which seems not behave as expected especially after
> commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
> so fix this by explicitly skip wakeup preemption for idle entities.
> 
> Fixes: 304000390f88 ("sched: Cgroup SCHED_IDLE support")
> Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>
> ---
>  kernel/sched/fair.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 1c0ef435a7aa..4340178f29b7 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -8778,12 +8778,15 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
>  	pse_is_idle = se_is_idle(pse);
>  
>  	/*
> -	 * Preempt an idle entity in favor of a non-idle entity (and don't preempt
> -	 * in the inverse case).
> +	 * Preempt an idle entity in favor of a non-idle entity.
>  	 */
>  	if (cse_is_idle && !pse_is_idle)
>  		goto preempt;
> -	if (cse_is_idle != pse_is_idle)
> +
> +	/*
> +	 * IDLE entities do not preempt others.
> +	 */
> +	if (unlikely(pse_is_idle))
>  		return;

It makes sense that idle tasks don't preempt each other. The patch
preserves the original behavior: preemption occurs when the currently
running entity (cse) is SCHED_IDLE while the waking entity (pse) is not,
and it correctly returns when cse is not SCHED_IDLE while pse is
SCHED_IDLE.

Reviewed-by: Madadi Vineeth Reddy <vineethr@linux.ibm.com>

Thanks,
Madadi Vineeth Reddy

>  
>  	/*


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/2] sched/fair: Do not let idle entities preempt others
  2025-02-21 11:12 ` [PATCH 1/2] sched/fair: Do not let idle entities preempt others Abel Wu
                     ` (2 preceding siblings ...)
  2025-02-22 17:12   ` Madadi Vineeth Reddy
@ 2025-02-22 17:48   ` Madadi Vineeth Reddy
  2025-02-23  8:45     ` Abel Wu
  3 siblings, 1 reply; 22+ messages in thread
From: Madadi Vineeth Reddy @ 2025-02-22 17:48 UTC (permalink / raw)
  To: Abel Wu
  Cc: open list:SCHEDULER, Ingo Molnar, Peter Zijlstra, Juri Lelli,
	Vincent Guittot, Dietmar Eggemann, Steven Rostedt, Ben Segall,
	Mel Gorman, Josh Don, Valentin Schneider, Tianchen Ding,
	Madadi Vineeth Reddy

On 21/02/25 16:42, Abel Wu wrote:
> A task with SCHED_IDLE policy doesn't preempt others by definition, and
> the semantics are intended to be preserved when extending to cgroups
> introduced in commit 304000390f88 ("sched: Cgroup SCHED_IDLE support").

[snip]

> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 1c0ef435a7aa..4340178f29b7 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -8778,12 +8778,15 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
>  	pse_is_idle = se_is_idle(pse);
>  
>  	/*
> -	 * Preempt an idle entity in favor of a non-idle entity (and don't preempt
> -	 * in the inverse case).
> +	 * Preempt an idle entity in favor of a non-idle entity.
>  	 */
>  	if (cse_is_idle && !pse_is_idle)
>  		goto preempt;

This patch doesn't apply cleanly on top of tip/sched/core because of the
commit f553741ac8c0 ("sched: Cancel the slice protection of the idle entity").
Please rebase it.

Thanks,
Madadi Vineeth Reddy

> -	if (cse_is_idle != pse_is_idle)
> +
> +	/*
> +	 * IDLE entities do not preempt others.
> +	 */
> +	if (unlikely(pse_is_idle))
>  		return;
>  
>  	/*


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-21 15:57     ` Abel Wu
@ 2025-02-22 18:16       ` Madadi Vineeth Reddy
  2025-02-23  8:44         ` Abel Wu
  0 siblings, 1 reply; 22+ messages in thread
From: Madadi Vineeth Reddy @ 2025-02-22 18:16 UTC (permalink / raw)
  To: Abel Wu
  Cc: Ingo Molnar, Peter Zijlstra, Juri Lelli, Dietmar Eggemann,
	Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider,
	Josh Don, Tianchen Ding, Vincent Guittot, open list:SCHEDULER,
	Madadi Vineeth Reddy

On 21/02/25 21:27, Abel Wu wrote:
> On 2/21/25 7:49 PM, Vincent Guittot Wrote:
>> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
>>>
>>> Idle tasks are by definition preempted by non-idle tasks whether feat
>>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
>>
>> I don't think it's true, only "sched_idle never preempts others" is
>> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
>> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
>> others at wakeup, idle, batch or normal
> 
> Hi Vincent, thanks for your comment!
> 
> The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
> from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
> which said:
> 
>     - no SCHED_IDLE buddies
>     - never let SCHED_IDLE preempt on wakeup
>     - always preempt SCHED_IDLE on wakeup
>     - limit SLEEPER fairness for SCHED_IDLE
> 
> and that commit let it be preempted before checking WAKEUP_PREEMPTION.
> The rules were introduced in 2009, and to the best of my knowledge there
> seemed no behavior change ever since. Please correct me if I missed
> anything.

As Vincent mentioned, WAKEUP_PREEMPTION is primarily for debugging. Maybe
it would help to document that SCHED_IDLE tasks are not preempted by non-idle
tasks when WAKEUP_PREEMPTION is disabled. Otherwise, the intent of having no
preemptions for debugging would be lost.

Thoughts?

Thanks,
Madadi Vineeth Reddy

> 
> Best Regards,
>     Abel
> 


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-22 18:16       ` Madadi Vineeth Reddy
@ 2025-02-23  8:44         ` Abel Wu
  2025-02-23 10:25           ` Madadi Vineeth Reddy
  2025-02-24 13:22           ` Vincent Guittot
  0 siblings, 2 replies; 22+ messages in thread
From: Abel Wu @ 2025-02-23  8:44 UTC (permalink / raw)
  To: Madadi Vineeth Reddy, Vincent Guittot
  Cc: Peter Zijlstra, Ingo Molnar, Juri Lelli, Dietmar Eggemann,
	Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider,
	Josh Don, Tianchen Ding, open list:SCHEDULER

Hi Madadi,

On 2/23/25 2:16 AM, Madadi Vineeth Reddy Wrote:
> On 21/02/25 21:27, Abel Wu wrote:
>> On 2/21/25 7:49 PM, Vincent Guittot Wrote:
>>> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
>>>>
>>>> Idle tasks are by definition preempted by non-idle tasks whether feat
>>>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
>>>
>>> I don't think it's true, only "sched_idle never preempts others" is
>>> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
>>> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
>>> others at wakeup, idle, batch or normal
>>
>> Hi Vincent, thanks for your comment!
>>
>> The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
>> from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
>> which said:
>>
>>      - no SCHED_IDLE buddies
>>      - never let SCHED_IDLE preempt on wakeup
>>      - always preempt SCHED_IDLE on wakeup
>>      - limit SLEEPER fairness for SCHED_IDLE
>>
>> and that commit let it be preempted before checking WAKEUP_PREEMPTION.
>> The rules were introduced in 2009, and to the best of my knowledge there
>> seemed no behavior change ever since. Please correct me if I missed
>> anything.
> 
> As Vincent mentioned, WAKEUP_PREEMPTION is primarily for debugging. Maybe
> it would help to document that SCHED_IDLE tasks are not preempted by non-idle
> tasks when WAKEUP_PREEMPTION is disabled. Otherwise, the intent of having no
> preemptions for debugging would be lost.
> 
> Thoughts?

I am not sure I really understand the purpose of this debug feature.
If it wants to provide a way to check whether a performance degrade of
certain workload is due to overscheduling or not, then do we really
care about performance of SCHED_IDLE workloads and why?

IMHO preempting SCHED_IDLE before WAKEUP_PREEMPTION is to preserve the
IDLE semantics trying to behave like real idle task. It is somehow
weird to me that we treat sched-idle cpus as idle while don't let the
non-idle tasks run immediately on sched-idle cpus on debug case.

Thanks,
	Abel


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 1/2] sched/fair: Do not let idle entities preempt others
  2025-02-22 17:48   ` Madadi Vineeth Reddy
@ 2025-02-23  8:45     ` Abel Wu
  0 siblings, 0 replies; 22+ messages in thread
From: Abel Wu @ 2025-02-23  8:45 UTC (permalink / raw)
  To: Madadi Vineeth Reddy
  Cc: open list:SCHEDULER, Ingo Molnar, Peter Zijlstra, Juri Lelli,
	Vincent Guittot, Dietmar Eggemann, Steven Rostedt, Ben Segall,
	Mel Gorman, Josh Don, Valentin Schneider, Tianchen Ding

On 2/23/25 1:48 AM, Madadi Vineeth Reddy Wrote:
> On 21/02/25 16:42, Abel Wu wrote:
>> A task with SCHED_IDLE policy doesn't preempt others by definition, and
>> the semantics are intended to be preserved when extending to cgroups
>> introduced in commit 304000390f88 ("sched: Cgroup SCHED_IDLE support").
> 
> [snip]
> 
>> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
>> index 1c0ef435a7aa..4340178f29b7 100644
>> --- a/kernel/sched/fair.c
>> +++ b/kernel/sched/fair.c
>> @@ -8778,12 +8778,15 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
>>   	pse_is_idle = se_is_idle(pse);
>>   
>>   	/*
>> -	 * Preempt an idle entity in favor of a non-idle entity (and don't preempt
>> -	 * in the inverse case).
>> +	 * Preempt an idle entity in favor of a non-idle entity.
>>   	 */
>>   	if (cse_is_idle && !pse_is_idle)
>>   		goto preempt;
> 
> This patch doesn't apply cleanly on top of tip/sched/core because of the
> commit f553741ac8c0 ("sched: Cancel the slice protection of the idle entity").
> Please rebase it.

Will rebase. Thanks!

> 
> Thanks,
> Madadi Vineeth Reddy
> 
>> -	if (cse_is_idle != pse_is_idle)
>> +
>> +	/*
>> +	 * IDLE entities do not preempt others.
>> +	 */
>> +	if (unlikely(pse_is_idle))
>>   		return;
>>   
>>   	/*
> 


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-23  8:44         ` Abel Wu
@ 2025-02-23 10:25           ` Madadi Vineeth Reddy
  2025-02-23 11:22             ` Abel Wu
  2025-02-24 13:22           ` Vincent Guittot
  1 sibling, 1 reply; 22+ messages in thread
From: Madadi Vineeth Reddy @ 2025-02-23 10:25 UTC (permalink / raw)
  To: Abel Wu
  Cc: Peter Zijlstra, Ingo Molnar, Juri Lelli, Dietmar Eggemann,
	Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider,
	Josh Don, Tianchen Ding, Vincent Guittot, open list:SCHEDULER,
	Madadi Vineeth Reddy

On 23/02/25 14:14, Abel Wu wrote:
> Hi Madadi,
> 
> On 2/23/25 2:16 AM, Madadi Vineeth Reddy Wrote:
>> On 21/02/25 21:27, Abel Wu wrote:
>>> On 2/21/25 7:49 PM, Vincent Guittot Wrote:
>>>> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
>>>>>
>>>>> Idle tasks are by definition preempted by non-idle tasks whether feat
>>>>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
>>>>
>>>> I don't think it's true, only "sched_idle never preempts others" is
>>>> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
>>>> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
>>>> others at wakeup, idle, batch or normal
>>>
>>> Hi Vincent, thanks for your comment!
>>>
>>> The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
>>> from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
>>> which said:
>>>
>>>      - no SCHED_IDLE buddies
>>>      - never let SCHED_IDLE preempt on wakeup
>>>      - always preempt SCHED_IDLE on wakeup
>>>      - limit SLEEPER fairness for SCHED_IDLE
>>>
>>> and that commit let it be preempted before checking WAKEUP_PREEMPTION.
>>> The rules were introduced in 2009, and to the best of my knowledge there
>>> seemed no behavior change ever since. Please correct me if I missed
>>> anything.
>>
>> As Vincent mentioned, WAKEUP_PREEMPTION is primarily for debugging. Maybe
>> it would help to document that SCHED_IDLE tasks are not preempted by non-idle
>> tasks when WAKEUP_PREEMPTION is disabled. Otherwise, the intent of having no
>> preemptions for debugging would be lost.
>>
>> Thoughts?
> 
> I am not sure I really understand the purpose of this debug feature.
> If it wants to provide a way to check whether a performance degrade of
> certain workload is due to overscheduling or not, then do we really
> care about performance of SCHED_IDLE workloads and why?

It's true that we may not be too concerned about performance with
SCHED_IDLE. The issue is preserve the original SCHED_IDLE definition
versus WAKEUP_PREEMPTION, which applies across all policies. Since by
default the feature is true. I am not sure. Either way seems ok to me.

Thanks,
Madadi Vineeth Reddy

> 
> IMHO preempting SCHED_IDLE before WAKEUP_PREEMPTION is to preserve the
> IDLE semantics trying to behave like real idle task. It is somehow
> weird to me that we treat sched-idle cpus as idle while don't let the
> non-idle tasks run immediately on sched-idle cpus on debug case.
> 
> Thanks,
>     Abel
> 


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-23 10:25           ` Madadi Vineeth Reddy
@ 2025-02-23 11:22             ` Abel Wu
  2025-02-24 13:47               ` Vincent Guittot
  0 siblings, 1 reply; 22+ messages in thread
From: Abel Wu @ 2025-02-23 11:22 UTC (permalink / raw)
  To: Madadi Vineeth Reddy, Vincent Guittot
  Cc: Peter Zijlstra, Ingo Molnar, Juri Lelli, Dietmar Eggemann,
	Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider,
	Josh Don, Tianchen Ding, open list:SCHEDULER

On 2/23/25 6:25 PM, Madadi Vineeth Reddy Wrote:
> On 23/02/25 14:14, Abel Wu wrote:
>> Hi Madadi,
>>
>> On 2/23/25 2:16 AM, Madadi Vineeth Reddy Wrote:
>>> On 21/02/25 21:27, Abel Wu wrote:
>>>> On 2/21/25 7:49 PM, Vincent Guittot Wrote:
>>>>> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
>>>>>>
>>>>>> Idle tasks are by definition preempted by non-idle tasks whether feat
>>>>>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
>>>>>
>>>>> I don't think it's true, only "sched_idle never preempts others" is
>>>>> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
>>>>> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
>>>>> others at wakeup, idle, batch or normal
>>>>
>>>> Hi Vincent, thanks for your comment!
>>>>
>>>> The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
>>>> from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
>>>> which said:
>>>>
>>>>       - no SCHED_IDLE buddies
>>>>       - never let SCHED_IDLE preempt on wakeup
>>>>       - always preempt SCHED_IDLE on wakeup
>>>>       - limit SLEEPER fairness for SCHED_IDLE
>>>>
>>>> and that commit let it be preempted before checking WAKEUP_PREEMPTION.
>>>> The rules were introduced in 2009, and to the best of my knowledge there
>>>> seemed no behavior change ever since. Please correct me if I missed
>>>> anything.
>>>
>>> As Vincent mentioned, WAKEUP_PREEMPTION is primarily for debugging. Maybe
>>> it would help to document that SCHED_IDLE tasks are not preempted by non-idle
>>> tasks when WAKEUP_PREEMPTION is disabled. Otherwise, the intent of having no
>>> preemptions for debugging would be lost.
>>>
>>> Thoughts?
>>
>> I am not sure I really understand the purpose of this debug feature.
>> If it wants to provide a way to check whether a performance degrade of
>> certain workload is due to overscheduling or not, then do we really
>> care about performance of SCHED_IDLE workloads and why?
> 
> It's true that we may not be too concerned about performance with
> SCHED_IDLE. The issue is preserve the original SCHED_IDLE definition
> versus WAKEUP_PREEMPTION, which applies across all policies. Since by

Yes, exactly.

> default the feature is true. I am not sure. Either way seems ok to me.

Hi Vincent,

Since Peter gave the priority to SCHED_IDLE semantics over WAKEUP_PREEMPTION
in his commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation"),
and the choice is kept unchanged for quite a long time until the recent merged
commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
which seemed not intend to change it, shall we restore the choice for now and
leave the discussion of the scope of WAKEUP_PREEMPTION to the future once any
usecase shows up?

Thanks,
	Abel


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-23  8:44         ` Abel Wu
  2025-02-23 10:25           ` Madadi Vineeth Reddy
@ 2025-02-24 13:22           ` Vincent Guittot
  1 sibling, 0 replies; 22+ messages in thread
From: Vincent Guittot @ 2025-02-24 13:22 UTC (permalink / raw)
  To: Abel Wu
  Cc: Madadi Vineeth Reddy, Peter Zijlstra, Ingo Molnar, Juri Lelli,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, Tianchen Ding, open list:SCHEDULER

On Sun, 23 Feb 2025 at 09:45, Abel Wu <wuyun.abel@bytedance.com> wrote:
>
> Hi Madadi,
>
> On 2/23/25 2:16 AM, Madadi Vineeth Reddy Wrote:
> > On 21/02/25 21:27, Abel Wu wrote:
> >> On 2/21/25 7:49 PM, Vincent Guittot Wrote:
> >>> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
> >>>>
> >>>> Idle tasks are by definition preempted by non-idle tasks whether feat
> >>>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
> >>>
> >>> I don't think it's true, only "sched_idle never preempts others" is
> >>> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
> >>> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
> >>> others at wakeup, idle, batch or normal
> >>
> >> Hi Vincent, thanks for your comment!
> >>
> >> The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
> >> from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
> >> which said:
> >>
> >>      - no SCHED_IDLE buddies
> >>      - never let SCHED_IDLE preempt on wakeup
> >>      - always preempt SCHED_IDLE on wakeup
> >>      - limit SLEEPER fairness for SCHED_IDLE
> >>
> >> and that commit let it be preempted before checking WAKEUP_PREEMPTION.
> >> The rules were introduced in 2009, and to the best of my knowledge there
> >> seemed no behavior change ever since. Please correct me if I missed
> >> anything.
> >
> > As Vincent mentioned, WAKEUP_PREEMPTION is primarily for debugging. Maybe
> > it would help to document that SCHED_IDLE tasks are not preempted by non-idle
> > tasks when WAKEUP_PREEMPTION is disabled. Otherwise, the intent of having no
> > preemptions for debugging would be lost.
> >
> > Thoughts?
>
> I am not sure I really understand the purpose of this debug feature.

I'm not sure that it has been even be used or useful for the last
couple of years. Should we just remove it ?

> If it wants to provide a way to check whether a performance degrade of
> certain workload is due to overscheduling or not, then do we really
> care about performance of SCHED_IDLE workloads and why?
>
> IMHO preempting SCHED_IDLE before WAKEUP_PREEMPTION is to preserve the
> IDLE semantics trying to behave like real idle task. It is somehow
> weird to me that we treat sched-idle cpus as idle while don't let the
> non-idle tasks run immediately on sched-idle cpus on debug case.
>
> Thanks,
>         Abel
>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-23 11:22             ` Abel Wu
@ 2025-02-24 13:47               ` Vincent Guittot
  2025-02-24 14:10                 ` Phil Auld
                                   ` (2 more replies)
  0 siblings, 3 replies; 22+ messages in thread
From: Vincent Guittot @ 2025-02-24 13:47 UTC (permalink / raw)
  To: Abel Wu
  Cc: Madadi Vineeth Reddy, Peter Zijlstra, Ingo Molnar, Juri Lelli,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, Tianchen Ding, open list:SCHEDULER

On Sun, 23 Feb 2025 at 12:22, Abel Wu <wuyun.abel@bytedance.com> wrote:
>
> On 2/23/25 6:25 PM, Madadi Vineeth Reddy Wrote:
> > On 23/02/25 14:14, Abel Wu wrote:
> >> Hi Madadi,
> >>
> >> On 2/23/25 2:16 AM, Madadi Vineeth Reddy Wrote:
> >>> On 21/02/25 21:27, Abel Wu wrote:
> >>>> On 2/21/25 7:49 PM, Vincent Guittot Wrote:
> >>>>> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
> >>>>>>
> >>>>>> Idle tasks are by definition preempted by non-idle tasks whether feat
> >>>>>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
> >>>>>
> >>>>> I don't think it's true, only "sched_idle never preempts others" is
> >>>>> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
> >>>>> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
> >>>>> others at wakeup, idle, batch or normal
> >>>>
> >>>> Hi Vincent, thanks for your comment!
> >>>>
> >>>> The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
> >>>> from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
> >>>> which said:
> >>>>
> >>>>       - no SCHED_IDLE buddies
> >>>>       - never let SCHED_IDLE preempt on wakeup
> >>>>       - always preempt SCHED_IDLE on wakeup
> >>>>       - limit SLEEPER fairness for SCHED_IDLE
> >>>>
> >>>> and that commit let it be preempted before checking WAKEUP_PREEMPTION.
> >>>> The rules were introduced in 2009, and to the best of my knowledge there
> >>>> seemed no behavior change ever since. Please correct me if I missed
> >>>> anything.
> >>>
> >>> As Vincent mentioned, WAKEUP_PREEMPTION is primarily for debugging. Maybe
> >>> it would help to document that SCHED_IDLE tasks are not preempted by non-idle
> >>> tasks when WAKEUP_PREEMPTION is disabled. Otherwise, the intent of having no
> >>> preemptions for debugging would be lost.
> >>>
> >>> Thoughts?
> >>
> >> I am not sure I really understand the purpose of this debug feature.
> >> If it wants to provide a way to check whether a performance degrade of
> >> certain workload is due to overscheduling or not, then do we really
> >> care about performance of SCHED_IDLE workloads and why?
> >
> > It's true that we may not be too concerned about performance with
> > SCHED_IDLE. The issue is preserve the original SCHED_IDLE definition
> > versus WAKEUP_PREEMPTION, which applies across all policies. Since by
>
> Yes, exactly.
>
> > default the feature is true. I am not sure. Either way seems ok to me.
>
> Hi Vincent,
>
> Since Peter gave the priority to SCHED_IDLE semantics over WAKEUP_PREEMPTION
> in his commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation"),
> and the choice is kept unchanged for quite a long time until the recent merged
> commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
> which seemed not intend to change it, shall we restore the choice for now and
> leave the discussion of the scope of WAKEUP_PREEMPTION to the future once any
> usecase shows up?

Or we should just remove it. I'm curious to know who used it during
the last couple of years ? Having in mind that lazy preemption adds
another level as check_preempt_wakeup_fair()  uses it so sched-idle
tasks might not always be immediately preempted anyway.


>
> Thanks,
>         Abel
>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-24 13:47               ` Vincent Guittot
@ 2025-02-24 14:10                 ` Phil Auld
  2025-02-25 17:14                   ` Vincent Guittot
  2025-02-25  6:29                 ` Abel Wu
  2025-02-25  6:56                 ` Tianchen Ding
  2 siblings, 1 reply; 22+ messages in thread
From: Phil Auld @ 2025-02-24 14:10 UTC (permalink / raw)
  To: Vincent Guittot
  Cc: Abel Wu, Madadi Vineeth Reddy, Peter Zijlstra, Ingo Molnar,
	Juri Lelli, Dietmar Eggemann, Steven Rostedt, Ben Segall,
	Mel Gorman, Valentin Schneider, Josh Don, Tianchen Ding,
	open list:SCHEDULER

On Mon, Feb 24, 2025 at 02:47:13PM +0100 Vincent Guittot wrote:
> On Sun, 23 Feb 2025 at 12:22, Abel Wu <wuyun.abel@bytedance.com> wrote:
> >
> > On 2/23/25 6:25 PM, Madadi Vineeth Reddy Wrote:
> > > On 23/02/25 14:14, Abel Wu wrote:
> > >> Hi Madadi,
> > >>
> > >> On 2/23/25 2:16 AM, Madadi Vineeth Reddy Wrote:
> > >>> On 21/02/25 21:27, Abel Wu wrote:
> > >>>> On 2/21/25 7:49 PM, Vincent Guittot Wrote:
> > >>>>> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
> > >>>>>>
> > >>>>>> Idle tasks are by definition preempted by non-idle tasks whether feat
> > >>>>>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
> > >>>>>
> > >>>>> I don't think it's true, only "sched_idle never preempts others" is
> > >>>>> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
> > >>>>> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
> > >>>>> others at wakeup, idle, batch or normal
> > >>>>
> > >>>> Hi Vincent, thanks for your comment!
> > >>>>
> > >>>> The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
> > >>>> from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
> > >>>> which said:
> > >>>>
> > >>>>       - no SCHED_IDLE buddies
> > >>>>       - never let SCHED_IDLE preempt on wakeup
> > >>>>       - always preempt SCHED_IDLE on wakeup
> > >>>>       - limit SLEEPER fairness for SCHED_IDLE
> > >>>>
> > >>>> and that commit let it be preempted before checking WAKEUP_PREEMPTION.
> > >>>> The rules were introduced in 2009, and to the best of my knowledge there
> > >>>> seemed no behavior change ever since. Please correct me if I missed
> > >>>> anything.
> > >>>
> > >>> As Vincent mentioned, WAKEUP_PREEMPTION is primarily for debugging. Maybe
> > >>> it would help to document that SCHED_IDLE tasks are not preempted by non-idle
> > >>> tasks when WAKEUP_PREEMPTION is disabled. Otherwise, the intent of having no
> > >>> preemptions for debugging would be lost.
> > >>>
> > >>> Thoughts?
> > >>
> > >> I am not sure I really understand the purpose of this debug feature.
> > >> If it wants to provide a way to check whether a performance degrade of
> > >> certain workload is due to overscheduling or not, then do we really
> > >> care about performance of SCHED_IDLE workloads and why?
> > >
> > > It's true that we may not be too concerned about performance with
> > > SCHED_IDLE. The issue is preserve the original SCHED_IDLE definition
> > > versus WAKEUP_PREEMPTION, which applies across all policies. Since by
> >
> > Yes, exactly.
> >
> > > default the feature is true. I am not sure. Either way seems ok to me.
> >
> > Hi Vincent,
> >
> > Since Peter gave the priority to SCHED_IDLE semantics over WAKEUP_PREEMPTION
> > in his commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation"),
> > and the choice is kept unchanged for quite a long time until the recent merged
> > commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
> > which seemed not intend to change it, shall we restore the choice for now and
> > leave the discussion of the scope of WAKEUP_PREEMPTION to the future once any
> > usecase shows up?
> 
> Or we should just remove it. I'm curious to know who used it during
> the last couple of years ? Having in mind that lazy preemption adds
> another level as check_preempt_wakeup_fair()  uses it so sched-idle
> tasks might not always be immediately preempted anyway.
> 

It can be helpful to be able to turn that off when chasing performance
issues. See the DELAY_DEQUEUE thread from a few months back. In that
case we never got to a good answer, but did use NO_WAKEUP_PREEMPTION
during debugging to take out some variables at least. FWIW.


Cheers,
Phil

> 
> >
> > Thanks,
> >         Abel
> >
> 

-- 


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-24 13:47               ` Vincent Guittot
  2025-02-24 14:10                 ` Phil Auld
@ 2025-02-25  6:29                 ` Abel Wu
  2025-02-25 17:15                   ` Vincent Guittot
  2025-02-25  6:56                 ` Tianchen Ding
  2 siblings, 1 reply; 22+ messages in thread
From: Abel Wu @ 2025-02-25  6:29 UTC (permalink / raw)
  To: Vincent Guittot
  Cc: Madadi Vineeth Reddy, Peter Zijlstra, Ingo Molnar, Juri Lelli,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, Tianchen Ding, open list:SCHEDULER

On 2/24/25 9:47 PM, Vincent Guittot wrote:
> 
> Or we should just remove it. I'm curious to know who used it during
> the last couple of years ? Having in mind that lazy preemption adds

TBH I have never used this feature. But since Phil mentioned a case
in debugging DELAY_DEQUEUE, I think we'd better keep it, what do you
think?

> another level as check_preempt_wakeup_fair()  uses it so sched-idle
> tasks might not always be immediately preempted anyway.

Right, thanks for mention that.

> 
> 
>>
>> Thanks,
>>          Abel
>>


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-24 13:47               ` Vincent Guittot
  2025-02-24 14:10                 ` Phil Auld
  2025-02-25  6:29                 ` Abel Wu
@ 2025-02-25  6:56                 ` Tianchen Ding
  2 siblings, 0 replies; 22+ messages in thread
From: Tianchen Ding @ 2025-02-25  6:56 UTC (permalink / raw)
  To: Vincent Guittot
  Cc: Madadi Vineeth Reddy, Peter Zijlstra, Ingo Molnar, Juri Lelli,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, open list:SCHEDULER, Abel Wu



On 2/24/25 9:47 PM, Vincent Guittot wrote:
[...]
> 
> Or we should just remove it. I'm curious to know who used it during
> the last couple of years ? Having in mind that lazy preemption adds
> another level as check_preempt_wakeup_fair()  uses it so sched-idle
> tasks might not always be immediately preempted anyway.
> 

I just remembered that I've mentioned this issue in another thread[1] 
before. Can we do preempt SCHED_IDLE immediately even in PREEMPT_LAZY? (to 
achieve better response time for SCHED_NORMAL)

[1] 
https://lore.kernel.org/all/8e6f02a0-2bd0-4e75-9055-2cb7c508ce4e@linux.alibaba.com/

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-24 14:10                 ` Phil Auld
@ 2025-02-25 17:14                   ` Vincent Guittot
  0 siblings, 0 replies; 22+ messages in thread
From: Vincent Guittot @ 2025-02-25 17:14 UTC (permalink / raw)
  To: Phil Auld
  Cc: Abel Wu, Madadi Vineeth Reddy, Peter Zijlstra, Ingo Molnar,
	Juri Lelli, Dietmar Eggemann, Steven Rostedt, Ben Segall,
	Mel Gorman, Valentin Schneider, Josh Don, Tianchen Ding,
	open list:SCHEDULER

On Mon, 24 Feb 2025 at 15:10, Phil Auld <pauld@redhat.com> wrote:
>
> On Mon, Feb 24, 2025 at 02:47:13PM +0100 Vincent Guittot wrote:
> > On Sun, 23 Feb 2025 at 12:22, Abel Wu <wuyun.abel@bytedance.com> wrote:
> > >
> > > On 2/23/25 6:25 PM, Madadi Vineeth Reddy Wrote:
> > > > On 23/02/25 14:14, Abel Wu wrote:
> > > >> Hi Madadi,
> > > >>
> > > >> On 2/23/25 2:16 AM, Madadi Vineeth Reddy Wrote:
> > > >>> On 21/02/25 21:27, Abel Wu wrote:
> > > >>>> On 2/21/25 7:49 PM, Vincent Guittot Wrote:
> > > >>>>> On Fri, 21 Feb 2025 at 12:12, Abel Wu <wuyun.abel@bytedance.com> wrote:
> > > >>>>>>
> > > >>>>>> Idle tasks are by definition preempted by non-idle tasks whether feat
> > > >>>>>> WAKEUP_PREEMPTION is enabled or not. This isn't true any longer since
> > > >>>>>
> > > >>>>> I don't think it's true, only "sched_idle never preempts others" is
> > > >>>>> always true but sched_feat(WAKEUP_PREEMPTION) is mainly there for
> > > >>>>> debug purpose so if WAKEUP_PREEMPTION is false then nobody preempts
> > > >>>>> others at wakeup, idle, batch or normal
> > > >>>>
> > > >>>> Hi Vincent, thanks for your comment!
> > > >>>>
> > > >>>> The SCHED_IDLE "definition" of being preempted by non-idle tasks comes
> > > >>>> from commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation")
> > > >>>> which said:
> > > >>>>
> > > >>>>       - no SCHED_IDLE buddies
> > > >>>>       - never let SCHED_IDLE preempt on wakeup
> > > >>>>       - always preempt SCHED_IDLE on wakeup
> > > >>>>       - limit SLEEPER fairness for SCHED_IDLE
> > > >>>>
> > > >>>> and that commit let it be preempted before checking WAKEUP_PREEMPTION.
> > > >>>> The rules were introduced in 2009, and to the best of my knowledge there
> > > >>>> seemed no behavior change ever since. Please correct me if I missed
> > > >>>> anything.
> > > >>>
> > > >>> As Vincent mentioned, WAKEUP_PREEMPTION is primarily for debugging. Maybe
> > > >>> it would help to document that SCHED_IDLE tasks are not preempted by non-idle
> > > >>> tasks when WAKEUP_PREEMPTION is disabled. Otherwise, the intent of having no
> > > >>> preemptions for debugging would be lost.
> > > >>>
> > > >>> Thoughts?
> > > >>
> > > >> I am not sure I really understand the purpose of this debug feature.
> > > >> If it wants to provide a way to check whether a performance degrade of
> > > >> certain workload is due to overscheduling or not, then do we really
> > > >> care about performance of SCHED_IDLE workloads and why?
> > > >
> > > > It's true that we may not be too concerned about performance with
> > > > SCHED_IDLE. The issue is preserve the original SCHED_IDLE definition
> > > > versus WAKEUP_PREEMPTION, which applies across all policies. Since by
> > >
> > > Yes, exactly.
> > >
> > > > default the feature is true. I am not sure. Either way seems ok to me.
> > >
> > > Hi Vincent,
> > >
> > > Since Peter gave the priority to SCHED_IDLE semantics over WAKEUP_PREEMPTION
> > > in his commit 6bc912b71b6f ("sched: SCHED_OTHER vs SCHED_IDLE isolation"),
> > > and the choice is kept unchanged for quite a long time until the recent merged
> > > commit faa42d29419d ("sched/fair: Make SCHED_IDLE entity be preempted in strict hierarchy")
> > > which seemed not intend to change it, shall we restore the choice for now and
> > > leave the discussion of the scope of WAKEUP_PREEMPTION to the future once any
> > > usecase shows up?
> >
> > Or we should just remove it. I'm curious to know who used it during
> > the last couple of years ? Having in mind that lazy preemption adds
> > another level as check_preempt_wakeup_fair()  uses it so sched-idle
> > tasks might not always be immediately preempted anyway.
> >
>
> It can be helpful to be able to turn that off when chasing performance
> issues. See the DELAY_DEQUEUE thread from a few months back. In that
> case we never got to a good answer, but did use NO_WAKEUP_PREEMPTION
> during debugging to take out some variables at least. FWIW.

ok, I didn't remember it has been used

>
>
> Cheers,
> Phil
>
> >
> > >
> > > Thanks,
> > >         Abel
> > >
> >
>
> --
>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-25  6:29                 ` Abel Wu
@ 2025-02-25 17:15                   ` Vincent Guittot
  2025-02-26  7:34                     ` Abel Wu
  0 siblings, 1 reply; 22+ messages in thread
From: Vincent Guittot @ 2025-02-25 17:15 UTC (permalink / raw)
  To: Abel Wu
  Cc: Madadi Vineeth Reddy, Peter Zijlstra, Ingo Molnar, Juri Lelli,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, Tianchen Ding, open list:SCHEDULER

On Tue, 25 Feb 2025 at 07:29, Abel Wu <wuyun.abel@bytedance.com> wrote:
>
> On 2/24/25 9:47 PM, Vincent Guittot wrote:
> >
> > Or we should just remove it. I'm curious to know who used it during
> > the last couple of years ? Having in mind that lazy preemption adds
>
> TBH I have never used this feature. But since Phil mentioned a case
> in debugging DELAY_DEQUEUE, I think we'd better keep it, what do you
> think?

Yes. And we need to figure out how to deal with the below as well

>
> > another level as check_preempt_wakeup_fair()  uses it so sched-idle
> > tasks might not always be immediately preempted anyway.
>
> Right, thanks for mention that.
>
> >
> >
> >>
> >> Thanks,
> >>          Abel
> >>
>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: Re: [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION
  2025-02-25 17:15                   ` Vincent Guittot
@ 2025-02-26  7:34                     ` Abel Wu
  0 siblings, 0 replies; 22+ messages in thread
From: Abel Wu @ 2025-02-26  7:34 UTC (permalink / raw)
  To: Vincent Guittot, Tianchen Ding
  Cc: Madadi Vineeth Reddy, Peter Zijlstra, Ingo Molnar, Juri Lelli,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Josh Don, open list:SCHEDULER

On 2/26/25 1:15 AM, Vincent Guittot wrote:
> On Tue, 25 Feb 2025 at 07:29, Abel Wu <wuyun.abel@bytedance.com> wrote:
>>
>> On 2/24/25 9:47 PM, Vincent Guittot wrote:
>>>
>>> Or we should just remove it. I'm curious to know who used it during
>>> the last couple of years ? Having in mind that lazy preemption adds
>>
>> TBH I have never used this feature. But since Phil mentioned a case
>> in debugging DELAY_DEQUEUE, I think we'd better keep it, what do you
>> think?
> 
> Yes. And we need to figure out how to deal with the below as well

Hi Vincent, Tianchen,

I'm not sure this is the right way to do to let SCHED_IDLE be promoted
to the full NEED_RESCHED, as LAZY has relaxed responsiveness of normal
tasks to TICK_NSEC/2 in avg and workloads using fair policies should
adjust their expectations on it. And I would also recommend scheduling
policies playing with each other inside the scope of policy, while the
preemption model is another scope. Tying the two scopes together might
make things complicate, although I can imagine that certain workloads
or scenarios will benefit from it.

Best Regards,
	Abel

> 
>>
>>> another level as check_preempt_wakeup_fair()  uses it so sched-idle
>>> tasks might not always be immediately preempted anyway.
>>
>> Right, thanks for mention that.
>>
>>>
>>>
>>>>
>>>> Thanks,
>>>>           Abel
>>>>
>>


^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2025-02-26  7:34 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-21 11:12 [PATCH 0/2] Fix SCHED_IDLE behavior on wakeup preemption Abel Wu
2025-02-21 11:12 ` [PATCH 1/2] sched/fair: Do not let idle entities preempt others Abel Wu
2025-02-21 11:48   ` Vincent Guittot
2025-02-21 19:54   ` Josh Don
2025-02-22 17:12   ` Madadi Vineeth Reddy
2025-02-22 17:48   ` Madadi Vineeth Reddy
2025-02-23  8:45     ` Abel Wu
2025-02-21 11:12 ` [PATCH 2/2] sched/fair: Fix premature check of WAKEUP_PREEMPTION Abel Wu
2025-02-21 11:49   ` Vincent Guittot
2025-02-21 15:57     ` Abel Wu
2025-02-22 18:16       ` Madadi Vineeth Reddy
2025-02-23  8:44         ` Abel Wu
2025-02-23 10:25           ` Madadi Vineeth Reddy
2025-02-23 11:22             ` Abel Wu
2025-02-24 13:47               ` Vincent Guittot
2025-02-24 14:10                 ` Phil Auld
2025-02-25 17:14                   ` Vincent Guittot
2025-02-25  6:29                 ` Abel Wu
2025-02-25 17:15                   ` Vincent Guittot
2025-02-26  7:34                     ` Abel Wu
2025-02-25  6:56                 ` Tianchen Ding
2025-02-24 13:22           ` Vincent Guittot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox