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: <20200513124540.GB12425@lorien.usersys.redhat.com>
Date:   Wed, 13 May 2020 08:45:40 -0400
From:   Phil Auld <pauld@...hat.com>
To:     Vincent Guittot <vincent.guittot@...aro.org>
Cc:     mingo@...hat.com, peterz@...radead.org, juri.lelli@...hat.com,
        dietmar.eggemann@....com, rostedt@...dmis.org, bsegall@...gle.com,
        mgorman@...e.de, linux-kernel@...r.kernel.org,
        ouwen210@...mail.com, pkondeti@...eaurora.org
Subject: Re: [PATCH v2] sched/fair: enqueue_task_fair optimization

Hi Vincent,

On Wed, May 13, 2020 at 02:33:35PM +0200 Vincent Guittot wrote:
> enqueue_task_fair jumps to enqueue_throttle label when cfs_rq_of(se) is
> throttled which means that se can't be NULL and we can skip the test.
>

s/be NULL/be non-NULL/

I think.

It's more like if it doesn't jump to the label then se must be NULL for
the loop to terminate.  The final loop is a NOP if se is NULL. The check
wasn't protecting that.

Otherwise still

> Reviewed-by: Phil Auld <pauld@...hat.com>

Cheers,
Phil


> Signed-off-by: Vincent Guittot <vincent.guittot@...aro.org>
> ---
> 
> v2 changes:
> - Remove useless if statement
> 
>  kernel/sched/fair.c | 39 ++++++++++++++++++++-------------------
>  1 file changed, 20 insertions(+), 19 deletions(-)
> 
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index a0c690d57430..b51b12d63c39 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -5513,28 +5513,29 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
>                         list_add_leaf_cfs_rq(cfs_rq);
>  	}
>  
> -enqueue_throttle:
> -	if (!se) {
> -		add_nr_running(rq, 1);
> -		/*
> -		 * Since new tasks are assigned an initial util_avg equal to
> -		 * half of the spare capacity of their CPU, tiny tasks have the
> -		 * ability to cross the overutilized threshold, which will
> -		 * result in the load balancer ruining all the task placement
> -		 * done by EAS. As a way to mitigate that effect, do not account
> -		 * for the first enqueue operation of new tasks during the
> -		 * overutilized flag detection.
> -		 *
> -		 * A better way of solving this problem would be to wait for
> -		 * the PELT signals of tasks to converge before taking them
> -		 * into account, but that is not straightforward to implement,
> -		 * and the following generally works well enough in practice.
> -		 */
> -		if (flags & ENQUEUE_WAKEUP)
> -			update_overutilized_status(rq);
> +	/* At this point se is NULL and we are at root level*/
> +	add_nr_running(rq, 1);
> +
> +	/*
> +	 * Since new tasks are assigned an initial util_avg equal to
> +	 * half of the spare capacity of their CPU, tiny tasks have the
> +	 * ability to cross the overutilized threshold, which will
> +	 * result in the load balancer ruining all the task placement
> +	 * done by EAS. As a way to mitigate that effect, do not account
> +	 * for the first enqueue operation of new tasks during the
> +	 * overutilized flag detection.
> +	 *
> +	 * A better way of solving this problem would be to wait for
> +	 * the PELT signals of tasks to converge before taking them
> +	 * into account, but that is not straightforward to implement,
> +	 * and the following generally works well enough in practice.
> +	 */
> +	if (flags & ENQUEUE_WAKEUP)
> +		update_overutilized_status(rq);
>  
>  	}
>  
> +enqueue_throttle:
>  	if (cfs_bandwidth_used()) {
>  		/*
>  		 * When bandwidth control is enabled; the cfs_rq_throttled()
> -- 
> 2.17.1
> 

-- 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ