All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.