powerpc/pseries/cpuidle: add polling idle for shared processor guests
authorNicholas Piggin <npiggin@gmail.com>
Tue, 10 Oct 2017 07:11:09 +0000 (17:11 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 18 Jan 2018 04:43:44 +0000 (15:43 +1100)
For shared processor guests (e.g., KVM), add an idle polling mode rather
than immediately returning to the hypervisor when the guest CPU goes
idle.

Test setup is a 2 socket POWER9 with 4 guests running, each with vCPUs
equal to 1/2 of real of CPUs. Saturated each guest with tbench. Using
polling idle gives about 1.4x throughput.

Kernel compile speed was not changed significantly.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/cpuidle/cpuidle-pseries.c

index 0f2b697cbb270815e98cacdf2fde734327f3c446..9e56bc411061fd573bf06b56acf8dc4e6235ecd8 100644 (file)
@@ -174,11 +174,17 @@ static struct cpuidle_state dedicated_states[] = {
  * States for shared partition case.
  */
 static struct cpuidle_state shared_states[] = {
+       { /* Snooze */
+               .name = "snooze",
+               .desc = "snooze",
+               .exit_latency = 0,
+               .target_residency = 0,
+               .enter = &snooze_loop },
        { /* Shared Cede */
                .name = "Shared Cede",
                .desc = "Shared Cede",
-               .exit_latency = 0,
-               .target_residency = 0,
+               .exit_latency = 10,
+               .target_residency = 100,
                .enter = &shared_cede_loop },
 };