* [PATCH v2] sched/fair: fix runnable_avg for throttled cfs
@ 2020-02-27 15:41 Vincent Guittot
2020-02-27 19:17 ` bsegall
2020-03-06 14:42 ` [tip: sched/core] sched/fair: Fix " tip-bot2 for Vincent Guittot
0 siblings, 2 replies; 3+ messages in thread
From: Vincent Guittot @ 2020-02-27 15:41 UTC (permalink / raw)
To: mingo, peterz, juri.lelli, dietmar.eggemann, rostedt, bsegall,
mgorman, linux-kernel
Cc: pauld, parth, valentin.schneider, hdanton, zhout, Vincent Guittot
When a cfs_rq is throttled, its group entity is dequeued and its running
tasks are removed. We must update runnable_avg with the old h_nr_running
and update group_se->runnable_weight with the new h_nr_running at each
level of the hierarchy.
Fixes: 9f68395333ad ("sched/pelt: Add a new runnable average signal")
Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
---
This patch applies on top of tip/sched/core
Changes since v1:
- update commit message
- add missing {}
kernel/sched/fair.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index fcc968669aea..22d067279269 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -4701,8 +4701,13 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq)
if (!se->on_rq)
break;
- if (dequeue)
+ if (dequeue) {
dequeue_entity(qcfs_rq, se, DEQUEUE_SLEEP);
+ } else {
+ update_load_avg(qcfs_rq, se, 0);
+ se_update_runnable(se);
+ }
+
qcfs_rq->h_nr_running -= task_delta;
qcfs_rq->idle_h_nr_running -= idle_task_delta;
@@ -4770,8 +4775,13 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
enqueue = 0;
cfs_rq = cfs_rq_of(se);
- if (enqueue)
+ if (enqueue) {
enqueue_entity(cfs_rq, se, ENQUEUE_WAKEUP);
+ } else {
+ update_load_avg(cfs_rq, se, 0);
+ se_update_runnable(se);
+ }
+
cfs_rq->h_nr_running += task_delta;
cfs_rq->idle_h_nr_running += idle_task_delta;
--
2.17.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] sched/fair: fix runnable_avg for throttled cfs
2020-02-27 15:41 [PATCH v2] sched/fair: fix runnable_avg for throttled cfs Vincent Guittot
@ 2020-02-27 19:17 ` bsegall
2020-03-06 14:42 ` [tip: sched/core] sched/fair: Fix " tip-bot2 for Vincent Guittot
1 sibling, 0 replies; 3+ messages in thread
From: bsegall @ 2020-02-27 19:17 UTC (permalink / raw)
To: Vincent Guittot
Cc: mingo, peterz, juri.lelli, dietmar.eggemann, rostedt, bsegall,
mgorman, linux-kernel, pauld, parth, valentin.schneider, hdanton,
zhout
Vincent Guittot <vincent.guittot@linaro.org> writes:
> When a cfs_rq is throttled, its group entity is dequeued and its running
> tasks are removed. We must update runnable_avg with the old h_nr_running
> and update group_se->runnable_weight with the new h_nr_running at each
> level of the hierarchy.
Looks good to me.
Reviewed-by: Ben Segall <bsegall@google.com>
>
> Fixes: 9f68395333ad ("sched/pelt: Add a new runnable average signal")
> Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
> ---
> This patch applies on top of tip/sched/core
>
> Changes since v1:
> - update commit message
> - add missing {}
>
> kernel/sched/fair.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index fcc968669aea..22d067279269 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -4701,8 +4701,13 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq)
> if (!se->on_rq)
> break;
>
> - if (dequeue)
> + if (dequeue) {
> dequeue_entity(qcfs_rq, se, DEQUEUE_SLEEP);
> + } else {
> + update_load_avg(qcfs_rq, se, 0);
> + se_update_runnable(se);
> + }
> +
> qcfs_rq->h_nr_running -= task_delta;
> qcfs_rq->idle_h_nr_running -= idle_task_delta;
>
> @@ -4770,8 +4775,13 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
> enqueue = 0;
>
> cfs_rq = cfs_rq_of(se);
> - if (enqueue)
> + if (enqueue) {
> enqueue_entity(cfs_rq, se, ENQUEUE_WAKEUP);
> + } else {
> + update_load_avg(cfs_rq, se, 0);
> + se_update_runnable(se);
> + }
> +
> cfs_rq->h_nr_running += task_delta;
> cfs_rq->idle_h_nr_running += idle_task_delta;
^ permalink raw reply [flat|nested] 3+ messages in thread
* [tip: sched/core] sched/fair: Fix runnable_avg for throttled cfs
2020-02-27 15:41 [PATCH v2] sched/fair: fix runnable_avg for throttled cfs Vincent Guittot
2020-02-27 19:17 ` bsegall
@ 2020-03-06 14:42 ` tip-bot2 for Vincent Guittot
1 sibling, 0 replies; 3+ messages in thread
From: tip-bot2 for Vincent Guittot @ 2020-03-06 14:42 UTC (permalink / raw)
To: linux-tip-commits
Cc: Ben Segall, Vincent Guittot, Peter Zijlstra (Intel),
Ingo Molnar, x86, LKML
The following commit has been merged into the sched/core branch of tip:
Commit-ID: 6212437f0f6043e825e021e4afc5cd63e248a2b4
Gitweb: https://git.kernel.org/tip/6212437f0f6043e825e021e4afc5cd63e248a2b4
Author: Vincent Guittot <vincent.guittot@linaro.org>
AuthorDate: Thu, 27 Feb 2020 16:41:15 +01:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 06 Mar 2020 12:57:25 +01:00
sched/fair: Fix runnable_avg for throttled cfs
When a cfs_rq is throttled, its group entity is dequeued and its running
tasks are removed. We must update runnable_avg with the old h_nr_running
and update group_se->runnable_weight with the new h_nr_running at each
level of the hierarchy.
Reviewed-by: Ben Segall <bsegall@google.com>
Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Fixes: 9f68395333ad ("sched/pelt: Add a new runnable average signal")
Link: https://lkml.kernel.org/r/20200227154115.8332-1-vincent.guittot@linaro.org
---
kernel/sched/fair.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 3887b73..54bd628 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -4720,8 +4720,13 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq)
if (!se->on_rq)
break;
- if (dequeue)
+ if (dequeue) {
dequeue_entity(qcfs_rq, se, DEQUEUE_SLEEP);
+ } else {
+ update_load_avg(qcfs_rq, se, 0);
+ se_update_runnable(se);
+ }
+
qcfs_rq->h_nr_running -= task_delta;
qcfs_rq->idle_h_nr_running -= idle_task_delta;
@@ -4789,8 +4794,13 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
enqueue = 0;
cfs_rq = cfs_rq_of(se);
- if (enqueue)
+ if (enqueue) {
enqueue_entity(cfs_rq, se, ENQUEUE_WAKEUP);
+ } else {
+ update_load_avg(cfs_rq, se, 0);
+ se_update_runnable(se);
+ }
+
cfs_rq->h_nr_running += task_delta;
cfs_rq->idle_h_nr_running += idle_task_delta;
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-03-06 14:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-27 15:41 [PATCH v2] sched/fair: fix runnable_avg for throttled cfs Vincent Guittot
2020-02-27 19:17 ` bsegall
2020-03-06 14:42 ` [tip: sched/core] sched/fair: Fix " tip-bot2 for Vincent Guittot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.