From: Shilpasri G Bhat <hidden> Date: 2015-05-29 12:32:48
The idle cpus which stay in snooze for a long period can degrade the
perfomance of the sibling cpus. If the cpu stays in snooze for more
than target residency of the next available idle state, then exit from
snooze. This gives a chance to the cpuidle governor to re-evaluate the
last idle state of the cpu to promote it to deeper idle states.
Signed-off-by: Shilpasri G Bhat <redacted>
---
drivers/cpuidle/cpuidle-powernv.c | 12 ++++++++++++
drivers/cpuidle/cpuidle-pseries.c | 11 +++++++++++
2 files changed, 23 insertions(+)
@@ -252,6 +259,11 @@ static int powernv_idle_probe(void)cpuidle_state_table=powernv_states;/* Device tree can indicate more idle states */max_idle_state=powernv_add_idle_states();+if(max_idle_state>1){+snooze_timeout_en=true;+snooze_timeout=powernv_states[1].target_residency*+tb_ticks_per_usec;+}}elsereturn-ENODEV;
From: Preeti U Murthy <hidden> Date: 2015-05-29 13:47:37
Hi Shilpa,
The subject does not convey the purpose of this patch clearly IMO.
I would definitely suggest changing the subject to something like
"Auto promotion of snooze to deeper idle state" or similar.
On 05/29/2015 06:02 PM, Shilpasri G Bhat wrote:
quoted hunk
The idle cpus which stay in snooze for a long period can degrade the
perfomance of the sibling cpus. If the cpu stays in snooze for more
than target residency of the next available idle state, then exit from
snooze. This gives a chance to the cpuidle governor to re-evaluate the
last idle state of the cpu to promote it to deeper idle states.
Signed-off-by: Shilpasri G Bhat <redacted>
---
drivers/cpuidle/cpuidle-powernv.c | 12 ++++++++++++
drivers/cpuidle/cpuidle-pseries.c | 11 +++++++++++
2 files changed, 23 insertions(+)
Any idea why we don't have snooze defined on the shared lpar configuration ?
In shared lpar case, spinning in guest context may potentially take
away cycles from other lpars waiting to run on the same physical cpu.
So the policy in shared lpar case is to let PowerVM hypervisor know
immediately that the guest cpu is idle which will allow the hypervisor
to use the cycles for other tasks/lpars.
--Vaidy
Any idea why we don't have snooze defined on the shared lpar configuration ?
In shared lpar case, spinning in guest context may potentially take
away cycles from other lpars waiting to run on the same physical cpu.
So the policy in shared lpar case is to let PowerVM hypervisor know
immediately that the guest cpu is idle which will allow the hypervisor
to use the cycles for other tasks/lpars.
Oh Ok! Thanks for the clarification !
Regards
Preeti U Murthy
From: Benjamin Herrenschmidt <hidden> Date: 2015-05-31 01:39:47
On Sat, 2015-05-30 at 11:31 +0530, Vaidyanathan Srinivasan wrote:
In shared lpar case, spinning in guest context may potentially take
away cycles from other lpars waiting to run on the same physical cpu.
So the policy in shared lpar case is to let PowerVM hypervisor know
immediately that the guest cpu is idle which will allow the hypervisor
to use the cycles for other tasks/lpars.
But that will have negative side effects under KVM no ?
Suresh mentioned something with his new directed interrupts code that we
had many cases where the interrupts ended up arriving shortly after we
exited to host for NAP'ing ...
Snooze might fix it...
Ben.
* Benjamin Herrenschmidt [off-list ref] [2015-05-30 20:38:22]:
On Sat, 2015-05-30 at 11:31 +0530, Vaidyanathan Srinivasan wrote:
quoted
In shared lpar case, spinning in guest context may potentially take
away cycles from other lpars waiting to run on the same physical cpu.
So the policy in shared lpar case is to let PowerVM hypervisor know
immediately that the guest cpu is idle which will allow the hypervisor
to use the cycles for other tasks/lpars.
But that will have negative side effects under KVM no ?
Yes, you have a good point. If one of the thread in the core goes to
cede, it can still come back quickly since the KVM guest context is
not switched yet. But in single threaded guest, this can force an
unnecessary exit/context switch overhead.
Now that we have fixed the snooze loop to be bounded and exit
predictably, KVM guest should actually use snooze state to improve
latency.
I will test this scenario and enable snooze state for KVM guest.
Suresh mentioned something with his new directed interrupts code that we
had many cases where the interrupts ended up arriving shortly after we
exited to host for NAP'ing ...
Snooze might fix it...
Right. This scenario is worth experimenting and then introduce snooze
loop for guest.
--Vaidy