Skip to content

Commit 729288b

Browse files
deggemanPeter Zijlstra
authored andcommitted
kernel/sched: Fix util_est accounting for DELAY_DEQUEUE
Remove delayed tasks from util_est even they are runnable. Exclude delayed task which are (a) migrating between rq's or (b) in a SAVE/RESTORE dequeue/enqueue. Signed-off-by: Dietmar Eggemann <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent 6b9ccbc commit 729288b

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

kernel/sched/fair.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6948,18 +6948,19 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
69486948
int rq_h_nr_running = rq->cfs.h_nr_running;
69496949
u64 slice = 0;
69506950

6951-
if (flags & ENQUEUE_DELAYED) {
6952-
requeue_delayed_entity(se);
6953-
return;
6954-
}
6955-
69566951
/*
69576952
* The code below (indirectly) updates schedutil which looks at
69586953
* the cfs_rq utilization to select a frequency.
69596954
* Let's add the task's estimated utilization to the cfs_rq's
69606955
* estimated utilization, before we update schedutil.
69616956
*/
6962-
util_est_enqueue(&rq->cfs, p);
6957+
if (!(p->se.sched_delayed && (task_on_rq_migrating(p) || (flags & ENQUEUE_RESTORE))))
6958+
util_est_enqueue(&rq->cfs, p);
6959+
6960+
if (flags & ENQUEUE_DELAYED) {
6961+
requeue_delayed_entity(se);
6962+
return;
6963+
}
69636964

69646965
/*
69656966
* If in_iowait is set, the code below may not trigger any cpufreq
@@ -7177,7 +7178,8 @@ static int dequeue_entities(struct rq *rq, struct sched_entity *se, int flags)
71777178
*/
71787179
static bool dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
71797180
{
7180-
util_est_dequeue(&rq->cfs, p);
7181+
if (!(p->se.sched_delayed && (task_on_rq_migrating(p) || (flags & DEQUEUE_SAVE))))
7182+
util_est_dequeue(&rq->cfs, p);
71817183

71827184
if (dequeue_entities(rq, &p->se, flags) < 0) {
71837185
util_est_update(&rq->cfs, p, DEQUEUE_SLEEP);

0 commit comments

Comments
 (0)