[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