[Skiboot] [PATCH v2] SLW: Remove stop1_lite and stop2_lite

Vaidyanathan Srinivasan svaidy at linux.vnet.ibm.com
Wed May 23 19:19:29 AEST 2018


* Akshay Adiga <akshay.adiga at linux.vnet.ibm.com> [2018-05-23 13:47:38]:

Lite stop states are designed to stop dispatch of instructions but not
relinquish thread resources.  They primarily reduce switching power
with a benefit of resuming operation without any state loss.  This
could save upto a micro-second in wakeup latency. However there is
a down side to this. Since thread resources are not relinquished,
other running threads in the core cannot benefit from automatically
folding down to lower SMT mode.

We have stop0_lite and stop1_lite that are pretty close in operational
characteristics, hence we can choose to keep only stop0_lite and
remove stop1_lite.

However, stop2_lite provides some minimal benefits over stop2. But
since the wakeup latency of stop2 to re-clock the core is 10-20us, the
context preservation benefit is reduced.

This patch removes all stop_lite states except stop0_lite.  We should
re-introduce stop2_lite once kernel cpuidle governor can understand
SMT folding thresholds and auto promote to a non-lite state.

> Signed-off-by: Akshay Adiga <akshay.adiga at linux.vnet.ibm.com>

Reviewed-by: Vaidyanathan Srinivasan <svaidy at linux.vnet.ibm.com>

> ---
>  hw/slw.c | 36 ++++++++----------------------------
>  1 file changed, 8 insertions(+), 28 deletions(-)
> 
> diff --git a/hw/slw.c b/hw/slw.c
> index 2b305db..ff6e2a4 100644
> --- a/hw/slw.c
> +++ b/hw/slw.c
> @@ -529,20 +529,9 @@ static struct cpu_idle_states power9_cpu_idle_states[] = {
>  				 | OPAL_PM_PSSCR_ESL \
>  				 | OPAL_PM_PSSCR_EC,
>  		.pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK },
> -	{
> -		.name = "stop1_lite", /* Enter stop1 with no state loss */
> -		.latency_ns = 4900,
> -		.residency_ns = 49000,
> -		.flags = 0*OPAL_PM_DEC_STOP \
> -		       | 0*OPAL_PM_TIMEBASE_STOP  \
> -		       | 0*OPAL_PM_LOSE_USER_CONTEXT \
> -		       | 0*OPAL_PM_LOSE_HYP_CONTEXT \
> -		       | 0*OPAL_PM_LOSE_FULL_CONTEXT \
> -		       | 1*OPAL_PM_STOP_INST_FAST,
> -		.pm_ctrl_reg_val = OPAL_PM_PSSCR_RL(1) \
> -				 | OPAL_PM_PSSCR_MTL(3) \
> -				 | OPAL_PM_PSSCR_TR(3),
> -		.pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK },
> +
> +	/* stop1_lite has been removed since it adds no additional benefit over stop0_lite */
> +
>  	{
>  		.name = "stop1",
>  		.latency_ns = 5000,
> @@ -559,20 +548,11 @@ static struct cpu_idle_states power9_cpu_idle_states[] = {
>  				 | OPAL_PM_PSSCR_ESL \
>  				 | OPAL_PM_PSSCR_EC,
>  		.pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK },
> -	{
> -		.name = "stop2_lite", /* Enter stop2 with no state loss */
> -		.latency_ns = 9900,
> -		.residency_ns = 99000,
> -		.flags = 0*OPAL_PM_DEC_STOP \
> -		       | 0*OPAL_PM_TIMEBASE_STOP  \
> -		       | 0*OPAL_PM_LOSE_USER_CONTEXT \
> -		       | 0*OPAL_PM_LOSE_HYP_CONTEXT \
> -		       | 0*OPAL_PM_LOSE_FULL_CONTEXT \
> -		       | 1*OPAL_PM_STOP_INST_FAST,
> -		.pm_ctrl_reg_val = OPAL_PM_PSSCR_RL(2) \
> -				 | OPAL_PM_PSSCR_MTL(3) \
> -				 | OPAL_PM_PSSCR_TR(3),
> -		.pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK },
> +	/*
> +	 * stop2_lite has been removed since currently it adds minimal benefit over stop2.
> +	 * However, the benefit is eclipsed by the time required to ungate the clocks
> +	 */
> +
>  	{
>  		.name = "stop2",
>  		.latency_ns = 10000,
> -- 
> 2.5.5
> 



More information about the Skiboot mailing list