[PATCH v2 3/3] sched/fair: Update comments regarding last and skip buddy

Adam Li posted 3 patches 1 year, 2 months ago
[PATCH v2 3/3] sched/fair: Update comments regarding last and skip buddy
Posted by Adam Li 1 year, 2 months ago
Commit 5e963f2bd465 ("sched/fair: Commit to EEVDF") removed the "last"
and "skip" buddy. Update comments in pick_next_entity().

Signed-off-by: Adam Li <adamli@os.amperecomputing.com>
Reviewed-by: Madadi Vineeth Reddy <vineethr@linux.ibm.com>
---
 kernel/sched/fair.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index d5a3b5589e4e..259c56dcdff6 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5602,17 +5602,11 @@ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
 
 static int dequeue_entities(struct rq *rq, struct sched_entity *se, int flags);
 
-/*
- * Pick the next process, keeping these things in mind, in this order:
- * 1) keep things fair between processes/task groups
- * 2) pick the "next" process, since someone really wants that to run
- * 3) pick the "last" process, for cache locality
- * 4) do not run the "skip" process, if something else is available
- */
 static struct sched_entity *
 pick_next_entity(struct rq *rq, struct cfs_rq *cfs_rq)
 {
 	/*
+	 * Pick the "next" buddy, since someone really wants that to run.
 	 * Enabling NEXT_BUDDY will affect latency but not fairness.
 	 */
 	if (sched_feat(NEXT_BUDDY) &&
-- 
2.25.1
Re: [PATCH v2 3/3] sched/fair: Update comments regarding last and skip buddy
Posted by Madadi Vineeth Reddy 11 months ago
Hi Adam,

On 27/11/24 11:26, Adam Li wrote:
> Commit 5e963f2bd465 ("sched/fair: Commit to EEVDF") removed the "last"
> and "skip" buddy. Update comments in pick_next_entity().
> 
> Signed-off-by: Adam Li <adamli@os.amperecomputing.com>
> Reviewed-by: Madadi Vineeth Reddy <vineethr@linux.ibm.com>
> ---
>  kernel/sched/fair.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index d5a3b5589e4e..259c56dcdff6 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -5602,17 +5602,11 @@ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
>  
>  static int dequeue_entities(struct rq *rq, struct sched_entity *se, int flags);
>  
> -/*
> - * Pick the next process, keeping these things in mind, in this order:
> - * 1) keep things fair between processes/task groups
> - * 2) pick the "next" process, since someone really wants that to run
> - * 3) pick the "last" process, for cache locality
> - * 4) do not run the "skip" process, if something else is available
> - */
>  static struct sched_entity *
>  pick_next_entity(struct rq *rq, struct cfs_rq *cfs_rq)
>  {
>  	/*
> +	 * Pick the "next" buddy, since someone really wants that to run.
>  	 * Enabling NEXT_BUDDY will affect latency but not fairness.
>  	 */
>  	if (sched_feat(NEXT_BUDDY) &&

There is one more reference to LAST_BUDDY in check_preempt_wakeup_fair.

Regarding pick_next_entity, the first two points are still valid, so only
points 3 and 4 could be removed?

Something like below

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 9dafb374d76d..379dbcbb24e9 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5578,8 +5578,6 @@ static int dequeue_entities(struct rq *rq, struct sched_entity *se, int flags);
  * Pick the next process, keeping these things in mind, in this order:
  * 1) keep things fair between processes/task groups
  * 2) pick the "next" process, since someone really wants that to run
- * 3) pick the "last" process, for cache locality
- * 4) do not run the "skip" process, if something else is available
  */
 static struct sched_entity *
 pick_next_entity(struct rq *rq, struct cfs_rq *cfs_rq)
@@ -8780,9 +8778,7 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
         *
         * Note: this also catches the edge-case of curr being in a throttled
         * group (e.g. via set_curr_task), since update_curr() (in the
-        * enqueue of curr) will have resulted in resched being set.  This
-        * prevents us from potentially nominating it as a false LAST_BUDDY
-        * below.
+        * enqueue of curr) will have resulted in resched being set.
         */
        if (test_tsk_need_resched(rq->curr))
                return;

Thanks,
Madadi Vineeth Reddy
Re: [PATCH v2 3/3] sched/fair: Update comments regarding last and skip buddy
Posted by Adam Li 11 months ago
Reviewed-by: Adam Li <adamli@os.amperecomputing.com>

Thanks,
-adam
On 3/13/2025 4:30 PM, Madadi Vineeth Reddy wrote:
> Hi Adam,
> 
> On 27/11/24 11:26, Adam Li wrote:
>> Commit 5e963f2bd465 ("sched/fair: Commit to EEVDF") removed the "last"
>> and "skip" buddy. Update comments in pick_next_entity().
>>
>> Signed-off-by: Adam Li <adamli@os.amperecomputing.com>
>> Reviewed-by: Madadi Vineeth Reddy <vineethr@linux.ibm.com>
>> ---
>>  kernel/sched/fair.c | 8 +-------
>>  1 file changed, 1 insertion(+), 7 deletions(-)
>>
>> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
>> index d5a3b5589e4e..259c56dcdff6 100644
>> --- a/kernel/sched/fair.c
>> +++ b/kernel/sched/fair.c
>> @@ -5602,17 +5602,11 @@ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
>>  
>>  static int dequeue_entities(struct rq *rq, struct sched_entity *se, int flags);
>>  
>> -/*
>> - * Pick the next process, keeping these things in mind, in this order:
>> - * 1) keep things fair between processes/task groups
>> - * 2) pick the "next" process, since someone really wants that to run
>> - * 3) pick the "last" process, for cache locality
>> - * 4) do not run the "skip" process, if something else is available
>> - */
>>  static struct sched_entity *
>>  pick_next_entity(struct rq *rq, struct cfs_rq *cfs_rq)
>>  {
>>  	/*
>> +	 * Pick the "next" buddy, since someone really wants that to run.
>>  	 * Enabling NEXT_BUDDY will affect latency but not fairness.
>>  	 */
>>  	if (sched_feat(NEXT_BUDDY) &&
> 
> There is one more reference to LAST_BUDDY in check_preempt_wakeup_fair.
> 
> Regarding pick_next_entity, the first two points are still valid, so only
> points 3 and 4 could be removed?
> 
> Something like below
> 
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 9dafb374d76d..379dbcbb24e9 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -5578,8 +5578,6 @@ static int dequeue_entities(struct rq *rq, struct sched_entity *se, int flags);
>   * Pick the next process, keeping these things in mind, in this order:
>   * 1) keep things fair between processes/task groups
>   * 2) pick the "next" process, since someone really wants that to run
> - * 3) pick the "last" process, for cache locality
> - * 4) do not run the "skip" process, if something else is available
>   */
>  static struct sched_entity *
>  pick_next_entity(struct rq *rq, struct cfs_rq *cfs_rq)
> @@ -8780,9 +8778,7 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
>          *
>          * Note: this also catches the edge-case of curr being in a throttled
>          * group (e.g. via set_curr_task), since update_curr() (in the
> -        * enqueue of curr) will have resulted in resched being set.  This
> -        * prevents us from potentially nominating it as a false LAST_BUDDY
> -        * below.
> +        * enqueue of curr) will have resulted in resched being set.
>          */
>         if (test_tsk_need_resched(rq->curr))
>                 return;
> 
> Thanks,
> Madadi Vineeth Reddy