* [PATCH 0/1] sched/fair: Update min_vruntime in more relaxed way @ 2023-11-16 10:54 Yiwei Lin 2023-11-16 10:54 ` [PATCH 1/1] " Yiwei Lin 0 siblings, 1 reply; 4+ messages in thread From: Yiwei Lin @ 2023-11-16 10:54 UTC (permalink / raw) To: mingo, peterz Cc: vincent.guittot, dietmar.eggemann, wuyun.abel, linux-kernel, s921975628 Because we only use min_vruntime as an offset to avoid overflow, and we will always update_curr() before making change to csf_rq. Unlike the requirement on CFS, I think it is possible to just update_min_vruntime() when update_curr(), which reduces the cost to evaluate the statistic. It is worth metioning that maybe we can update_min_vruntime() in a more relaxed form according to this fact, but we may need more works to optimize in the future. The following link shows some discussion which relates to this patch: https://lore.kernel.org/lkml/20231107090510.71322-1-wuyun.abel@bytedance.com/T/#mc277f045367f4186b34c83e636907ce2f5eb481e Yiwei Lin (1): sched/fair: Update min_vruntime in more relaxed way kernel/sched/fair.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/1] sched/fair: Update min_vruntime in more relaxed way 2023-11-16 10:54 [PATCH 0/1] sched/fair: Update min_vruntime in more relaxed way Yiwei Lin @ 2023-11-16 10:54 ` Yiwei Lin 2023-11-16 11:16 ` Abel Wu 0 siblings, 1 reply; 4+ messages in thread From: Yiwei Lin @ 2023-11-16 10:54 UTC (permalink / raw) To: mingo, peterz Cc: vincent.guittot, dietmar.eggemann, wuyun.abel, linux-kernel, s921975628 As EEVDF adopts lag-based solution which is irrespective of min_vruntime like CFS before, min_vruntime is only used as an offset to avoid overflow on evaluation of avg_vruntime now. Rely on the fact we will always update_curr() before change to cfs_rq, it seems to make sense if we just update_min_vruntime() with update_curr() to reduce the cost. Signed-off-by: Yiwei Lin <s921975628@gmail.com> --- kernel/sched/fair.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 07f555857..5c40adfae 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -3815,17 +3815,8 @@ static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, enqueue_load_avg(cfs_rq, se); if (se->on_rq) { update_load_add(&cfs_rq->load, se->load.weight); - if (!curr) { - /* - * The entity's vruntime has been adjusted, so let's check - * whether the rq-wide min_vruntime needs updated too. Since - * the calculations above require stable min_vruntime rather - * than up-to-date one, we do the update at the end of the - * reweight process. - */ + if (!curr) __enqueue_entity(cfs_rq, se); - update_min_vruntime(cfs_rq); - } } } @@ -5347,15 +5338,6 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) update_cfs_group(se); - /* - * Now advance min_vruntime if @se was the entity holding it back, - * except when: DEQUEUE_SAVE && !DEQUEUE_MOVE, in this case we'll be - * put back on, and if we advance min_vruntime, we'll be placed back - * further than we started -- ie. we'll be penalized. - */ - if ((flags & (DEQUEUE_SAVE | DEQUEUE_MOVE)) != DEQUEUE_SAVE) - update_min_vruntime(cfs_rq); - if (cfs_rq->nr_running == 0) update_idle_cfs_rq_clock_pelt(cfs_rq); } -- 2.34.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/1] sched/fair: Update min_vruntime in more relaxed way 2023-11-16 10:54 ` [PATCH 1/1] " Yiwei Lin @ 2023-11-16 11:16 ` Abel Wu 2023-11-16 11:33 ` Yiwei Lin 0 siblings, 1 reply; 4+ messages in thread From: Abel Wu @ 2023-11-16 11:16 UTC (permalink / raw) To: Yiwei Lin, mingo, peterz; +Cc: vincent.guittot, dietmar.eggemann, linux-kernel On 11/16/23 6:54 PM, Yiwei Lin Wrote: > As EEVDF adopts lag-based solution which is irrespective of > min_vruntime like CFS before, min_vruntime is only used as > an offset to avoid overflow on evaluation of avg_vruntime now. > Rely on the fact we will always update_curr() before change > to cfs_rq, it seems to make sense if we just > update_min_vruntime() with update_curr() to reduce the cost. > > Signed-off-by: Yiwei Lin <s921975628@gmail.com> > --- > kernel/sched/fair.c | 20 +------------------- > 1 file changed, 1 insertion(+), 19 deletions(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 07f555857..5c40adfae 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -3815,17 +3815,8 @@ static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, > enqueue_load_avg(cfs_rq, se); > if (se->on_rq) { > update_load_add(&cfs_rq->load, se->load.weight); > - if (!curr) { > - /* > - * The entity's vruntime has been adjusted, so let's check > - * whether the rq-wide min_vruntime needs updated too. Since > - * the calculations above require stable min_vruntime rather > - * than up-to-date one, we do the update at the end of the > - * reweight process. > - */ > + if (!curr) > __enqueue_entity(cfs_rq, se); > - update_min_vruntime(cfs_rq); > - } > } > } > > @@ -5347,15 +5338,6 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) > > update_cfs_group(se); > > - /* > - * Now advance min_vruntime if @se was the entity holding it back, > - * except when: DEQUEUE_SAVE && !DEQUEUE_MOVE, in this case we'll be > - * put back on, and if we advance min_vruntime, we'll be placed back > - * further than we started -- ie. we'll be penalized. > - */ > - if ((flags & (DEQUEUE_SAVE | DEQUEUE_MOVE)) != DEQUEUE_SAVE) > - update_min_vruntime(cfs_rq); > - > if (cfs_rq->nr_running == 0) > update_idle_cfs_rq_clock_pelt(cfs_rq); > } For now, core pick of core scheduling relies on min_vruntime to be fresh, so please just fix commit eab03c23c2a1 to preserve its original behavior by moving update_min_vruntime() to proper position. And behavior change can be posted separated. BTW it seems unnecessary to include a cover-letter for a single patch. Thanks, Abel ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/1] sched/fair: Update min_vruntime in more relaxed way 2023-11-16 11:16 ` Abel Wu @ 2023-11-16 11:33 ` Yiwei Lin 0 siblings, 0 replies; 4+ messages in thread From: Yiwei Lin @ 2023-11-16 11:33 UTC (permalink / raw) To: Abel Wu, mingo, peterz; +Cc: vincent.guittot, dietmar.eggemann, linux-kernel On 11/16/23 19:16, Abel Wu wrote: > On 11/16/23 6:54 PM, Yiwei Lin Wrote: >> As EEVDF adopts lag-based solution which is irrespective of >> min_vruntime like CFS before, min_vruntime is only used as >> an offset to avoid overflow on evaluation of avg_vruntime now. >> Rely on the fact we will always update_curr() before change >> to cfs_rq, it seems to make sense if we just >> update_min_vruntime() with update_curr() to reduce the cost. >> >> Signed-off-by: Yiwei Lin <s921975628@gmail.com> >> --- >> kernel/sched/fair.c | 20 +------------------- >> 1 file changed, 1 insertion(+), 19 deletions(-) >> >> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c >> index 07f555857..5c40adfae 100644 >> --- a/kernel/sched/fair.c >> +++ b/kernel/sched/fair.c >> @@ -3815,17 +3815,8 @@ static void reweight_entity(struct cfs_rq >> *cfs_rq, struct sched_entity *se, >> enqueue_load_avg(cfs_rq, se); >> if (se->on_rq) { >> update_load_add(&cfs_rq->load, se->load.weight); >> - if (!curr) { >> - /* >> - * The entity's vruntime has been adjusted, so let's check >> - * whether the rq-wide min_vruntime needs updated too. >> Since >> - * the calculations above require stable min_vruntime >> rather >> - * than up-to-date one, we do the update at the end of the >> - * reweight process. >> - */ >> + if (!curr) >> __enqueue_entity(cfs_rq, se); >> - update_min_vruntime(cfs_rq); >> - } >> } >> } >> @@ -5347,15 +5338,6 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct >> sched_entity *se, int flags) >> update_cfs_group(se); >> - /* >> - * Now advance min_vruntime if @se was the entity holding it back, >> - * except when: DEQUEUE_SAVE && !DEQUEUE_MOVE, in this case >> we'll be >> - * put back on, and if we advance min_vruntime, we'll be placed >> back >> - * further than we started -- ie. we'll be penalized. >> - */ >> - if ((flags & (DEQUEUE_SAVE | DEQUEUE_MOVE)) != DEQUEUE_SAVE) >> - update_min_vruntime(cfs_rq); >> - >> if (cfs_rq->nr_running == 0) >> update_idle_cfs_rq_clock_pelt(cfs_rq); >> } > > For now, core pick of core scheduling relies on min_vruntime to be fresh, > so please just fix commit eab03c23c2a1 to preserve its original behavior > by moving update_min_vruntime() to proper position. And behavior change > can be posted separated. Sorry for not noticing the requirement on core scheduling and applying bad solution. I should take a closer look for the influence when changing the approach to update_min_vruntime(). I'll send another patch which just move update_min_vruntime() to the right place later on. > > BTW it seems unnecessary to include a cover-letter for a single patch. > Got it! Still learning how to work with the kernel mailing list. Thanks for the kind suggestion! > Thanks, > Abel ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-11-16 11:33 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-11-16 10:54 [PATCH 0/1] sched/fair: Update min_vruntime in more relaxed way Yiwei Lin 2023-11-16 10:54 ` [PATCH 1/1] " Yiwei Lin 2023-11-16 11:16 ` Abel Wu 2023-11-16 11:33 ` Yiwei Lin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®