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
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
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
© 2016 - 2026 Red Hat, Inc.