lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAKfTPtByU2ROggQh6i9Vn-fTikKHNQwWsyxJfY_3zW-CkMH0UQ@mail.gmail.com>
Date: Fri, 18 Apr 2025 17:00:29 +0200
From: Vincent Guittot <vincent.guittot@...aro.org>
To: Xuewen Yan <xuewen.yan@...soc.com>
Cc: dietmar.eggemann@....com, mingo@...hat.com, peterz@...radead.org, 
	juri.lelli@...hat.com, rostedt@...dmis.org, bsegall@...gle.com, 
	mgorman@...e.de, vschneid@...hat.com, hongyan.xia2@....com, 
	linux-kernel@...r.kernel.org, ke.wang@...soc.com, di.shen@...soc.com, 
	xuewen.yan94@...il.com, kprateek.nayak@....com, kuyo.chang@...iatek.com, 
	juju.sung@...iatek.com, qyousef@...alina.io
Subject: Re: [PATCH V3 1/2] sched/util_est: Simply the condition for util_est_dequeue/enqueue

On Thu, 17 Apr 2025 at 06:36, Xuewen Yan <xuewen.yan@...soc.com> wrote:
>
> To prevent double enqueue/dequeue of the util-est for sched_delayed tasks,
> commit 729288bc6856 ("kernel/sched: Fix util_est accounting for DELAY_DEQUEUE")
> added the corresponding check. This check excludes double en/dequeue during
> task migration and priority changes.
>
> In fact, these conditions can be simplified.
>
> For util_est_dequeue, we know that sched_delayed flag is set in dequeue_entity.
> When the task is sleeping, we need to call util_est_dequeue to subtract
> util-est from the cfs_rq. At this point, sched_delayed has not yet been set.
> If we find that sched_delayed is already set, it indicates that this task
> has already called dequeue_task_fair once. In this case, there is no need to
> call util_est_dequeue again. Therefore, simply checking the sched_delayed flag
> should be sufficient to prevent unnecessary util_est updates during the dequeue.
>
> For util_est_enqueue, our goal is to add the util_est to the cfs_rq
> when task enqueue. However, we don't want to add the util_est of a
> sched_delayed task to the cfs_rq because the task is sleeping.
> Therefore, we can exclude the util_est_enqueue for sched_delayed tasks
> by checking the sched_delayed flag. However, when waking up a delayed task,
> the sched_delayed flag is cleared after util_est_enqueue. As a result,
> if we only check the sched_delayed flag, we would miss the util_est_enqueue.
> Since waking up a sched_delayed task calls enqueue_task with the ENQUEUE_DELAYED flag,
> we can determine whether to call util_est_enqueue by checking if the
> enqueue_flag contains ENQUEUE_DELAYED.
>
> Signed-off-by: Xuewen Yan <xuewen.yan@...soc.com>

Reviewed-by: Vincent Guittot <vincent.guittot@...aro.org>


> ---
> v3:
> - Separated from the previous patch.
> - rework the commit message.
> ---
>  kernel/sched/fair.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index e43993a4e580..18c85857bff0 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -6941,7 +6941,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
>          * Let's add the task's estimated utilization to the cfs_rq's
>          * estimated utilization, before we update schedutil.
>          */
> -       if (!(p->se.sched_delayed && (task_on_rq_migrating(p) || (flags & ENQUEUE_RESTORE))))
> +       if (!p->se.sched_delayed || (flags & ENQUEUE_DELAYED))
>                 util_est_enqueue(&rq->cfs, p);
>
>         if (flags & ENQUEUE_DELAYED) {
> @@ -7183,7 +7183,7 @@ static int dequeue_entities(struct rq *rq, struct sched_entity *se, int flags)
>   */
>  static bool dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
>  {
> -       if (!(p->se.sched_delayed && (task_on_rq_migrating(p) || (flags & DEQUEUE_SAVE))))
> +       if (!p->se.sched_delayed)
>                 util_est_dequeue(&rq->cfs, p);
>
>         util_est_update(&rq->cfs, p, flags & DEQUEUE_SLEEP);
> --
> 2.25.1
>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ