From: Tianchen Ding <dtcccc@linux.alibaba.com>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Valentin Schneider <vschneid@redhat.com>,
Abel Wu <wuyun.abel@bytedance.com>
Subject: [PATCH v2 2/2] sched/eevdf: Fix miscalculation in reweight_entity() when se is not curr
Date: Wed, 6 Mar 2024 10:21:33 +0800 [thread overview]
Message-ID: <20240306022133.81008-3-dtcccc@linux.alibaba.com> (raw)
In-Reply-To: <20240306022133.81008-1-dtcccc@linux.alibaba.com>
reweight_eevdf() only keeps V unchanged inside itself. When se !=
cfs_rq->curr, it would be dequeued from rb tree first. So that V is
changed and the result is wrong. Pass the original V to reweight_eevdf()
to fix this issue.
Fixes: eab03c23c2a1 ("sched/eevdf: Fix vruntime adjustment on reweight")
Signed-off-by: Tianchen Ding <dtcccc@linux.alibaba.com>
Reviewed-by: Abel Wu <wuyun.abel@bytedance.com>
---
kernel/sched/fair.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 5551ce2af73e..091a1a750638 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3676,11 +3676,10 @@ static inline void
dequeue_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) { }
#endif
-static void reweight_eevdf(struct cfs_rq *cfs_rq, struct sched_entity *se,
+static void reweight_eevdf(struct sched_entity *se, u64 avruntime,
unsigned long weight)
{
unsigned long old_weight = se->load.weight;
- u64 avruntime = avg_vruntime(cfs_rq);
s64 vlag, vslice;
/*
@@ -3787,10 +3786,12 @@ static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se,
unsigned long weight)
{
bool curr = cfs_rq->curr == se;
+ u64 avruntime;
if (se->on_rq) {
/* commit outstanding execution time */
update_curr(cfs_rq);
+ avruntime = avg_vruntime(cfs_rq);
if (!curr)
__dequeue_entity(cfs_rq, se);
update_load_sub(&cfs_rq->load, se->load.weight);
@@ -3804,7 +3805,7 @@ static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se,
*/
se->vlag = div_s64(se->vlag * se->load.weight, weight);
} else {
- reweight_eevdf(cfs_rq, se, weight);
+ reweight_eevdf(se, avruntime, weight);
}
update_load_set(&se->load, weight);
--
2.39.3
next prev parent reply other threads:[~2024-03-06 2:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-06 2:21 [PATCH v2 0/2] sched/eevdf: Minor fixes for reweight_entity() Tianchen Ding
2024-03-06 2:21 ` [PATCH v2 1/2] sched/eevdf: Always update V if se->on_rq when reweighting Tianchen Ding
2024-03-06 3:06 ` Abel Wu
2024-04-22 11:39 ` [tip: sched/urgent] " tip-bot2 for Tianchen Ding
2024-03-06 2:21 ` Tianchen Ding [this message]
2024-04-22 11:39 ` [tip: sched/urgent] sched/eevdf: Fix miscalculation in reweight_entity() when se is not curr tip-bot2 for Tianchen Ding
2024-03-13 6:24 ` [PATCH v2 0/2] sched/eevdf: Minor fixes for reweight_entity() K Prateek Nayak
2024-04-08 3:24 ` Tianchen Ding
2024-04-19 7:27 ` Chen Yu
2024-04-19 8:02 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240306022133.81008-3-dtcccc@linux.alibaba.com \
--to=dtcccc@linux.alibaba.com \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=wuyun.abel@bytedance.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox