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] [day] [month] [year] [list]
Message-ID: <b4c57171-be10-ffe3-514b-2464806004c9@arm.com>
Date:   Thu, 26 May 2022 09:38:01 +0100
From:   Lukasz Luba <lukasz.luba@....com>
To:     linux-kernel@...r.kernel.org
Cc:     corbet@....net, mingo@...hat.com, peterz@...radead.org,
        juri.lelli@...hat.com, vincent.guittot@...aro.org,
        dietmar.eggemann@....com, rostedt@...dmis.org, bsegall@...gle.com,
        mgorman@...e.de, bristot@...hat.com, xuewen.yan@...soc.com,
        linux-doc@...r.kernel.org
Subject: Re: [PATCH] sched: thermal_load_avg: Change the raising/decaying
 period mechanism

Hi all,

Gentle ping.
Are there any objections to speed-up this thermal clock?

Regards,
Lukasz

On 4/29/22 10:12, Lukasz Luba wrote:
> The thermal pressure mechanism consists of two parts:
> 1) PELT-like signal with its own clock (rq_clock_thermal()) which is
>     responsible for the raising/decaying characteristics
> 2) instantaneous information provided in 'thermal_pressure' variable,
>     which is set by thermal framework or drivers to notify about
>     the throttling.
> 
> Add a new mechanism which allows to change the raising/decaying
> characteristics of the PELT-like thermal signal. To make this happen
> modify how the rq_clock_thermal() counts. Instead of only slowing down the
> clock, which results in longer raising/decaying periods, make it faster.
> Thanks to that the information about throttling can faster arrive at the
> right place in the scheduler. This faster propagation of information
> is useful for the latency sensitive stuff, such as RT tasks. In
> a situation of CPU capacity inversion, such task might suffer when
> staying on the lower capacity CPU.
> 
> Change the boot parameter 'sched_thermal_decay_shift' allowed values
> and use the negatives to speed up the thermal clock.
> 
> Signed-off-by: Lukasz Luba <lukasz.luba@....com>
> ---
> Hi all,
> 
> This patch addresses an issue of missing configuration for the
> thermal pressure raising/decaying characteristic to be more instantaneous.
> This more sharp signal might be better if the raw thermal signal
> already has 'some logic' or doesn't change that often, like in IPA
> (every 100ms).
> 
> I've prepared a notebook with experiments with different shifter
> values [0, -2, -3, -4, 2, 4] for IPA thermal update periods:
> 50ms, 100ms (and also jumping between cooling states 0, 1 or 0, 3).
> It presents two signals: instantaneous thermal update and thermal_load_avg().
> It would be useful for discussion. I can provide more details if needed.
> 
> Regards,
> Lukasz Luba
> 
> [1] https://nbviewer.org/github/lukaszluba-arm/lisa/blob/public_tests/thermal_pressure_delays-all-ipa.ipynb
> 
> 
> 
>   Documentation/admin-guide/kernel-parameters.txt | 15 +++++++++++----
>   kernel/sched/fair.c                             |  2 +-
>   kernel/sched/sched.h                            | 17 +++++++++++++++--
>   3 files changed, 27 insertions(+), 7 deletions(-)
> 
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index c2d1f8b5e8f3..ba32540f1fbf 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -5117,15 +5117,22 @@
>   			pressure signal. Thermal pressure signal follows the
>   			default decay period of other scheduler pelt
>   			signals(usually 32 ms but configurable). Setting
> -			sched_thermal_decay_shift will left shift the decay
> -			period for the thermal pressure signal by the shift
> -			value.
> +			a positive value for sched_thermal_decay_shift will
> +			left shift the decay period for the thermal pressure
> +			signal by the shift value. This would make
> +			raising/decaying characteristic longer. Setting
> +			a negative value will right shift the decay period
> +			by the shift value and make the raising/decaying
> +			characteristic more sharp.
>   			i.e. with the default pelt decay period of 32 ms
>   			sched_thermal_decay_shift   thermal pressure decay pr
> +				-2			8 ms
> +				-1			16 ms
> +				0			32 ms
>   				1			64 ms
>   				2			128 ms
>   			and so on.
> -			Format: integer between 0 and 10
> +			Format: integer between -5 and 10
>   			Default is 0.
>   
>   	scftorture.holdoff= [KNL]
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 5146163bfabb..93cb7db5939c 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -100,7 +100,7 @@ static int __init setup_sched_thermal_decay_shift(char *str)
>   	if (kstrtoint(str, 0, &_shift))
>   		pr_warn("Unable to set scheduler thermal pressure decay shift parameter\n");
>   
> -	sched_thermal_decay_shift = clamp(_shift, 0, 10);
> +	sched_thermal_decay_shift = clamp(_shift, -5, 10);
>   	return 1;
>   }
>   __setup("sched_thermal_decay_shift=", setup_sched_thermal_decay_shift);
> diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
> index de53be905739..cb453c0f3572 100644
> --- a/kernel/sched/sched.h
> +++ b/kernel/sched/sched.h
> @@ -1478,8 +1478,14 @@ static inline u64 rq_clock_task(struct rq *rq)
>   /**
>    * By default the decay is the default pelt decay period.
>    * The decay shift can change the decay period in
> - * multiples of 32.
> + * multiples of 32 to make it longer or to make it shorter using
> + * negative values as on the example below.
>    *  Decay shift		Decay period(ms)
> + *	-5			1
> + *	-4			2
> + *	-3			4
> + *	-2			8
> + *	-1			16
>    *	0			32
>    *	1			64
>    *	2			128
> @@ -1490,7 +1496,14 @@ extern int sched_thermal_decay_shift;
>   
>   static inline u64 rq_clock_thermal(struct rq *rq)
>   {
> -	return rq_clock_task(rq) >> sched_thermal_decay_shift;
> +	u64 thermal_clock = rq_clock_task(rq);
> +
> +	if (sched_thermal_decay_shift < 0)
> +		thermal_clock <<= -sched_thermal_decay_shift;
> +	else
> +		thermal_clock >>= sched_thermal_decay_shift;
> +
> +	return thermal_clock;
>   }
>   
>   static inline void rq_clock_skip_update(struct rq *rq)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ