Rafael J. Wysocki
148519120c
Revert "cpuidle: Quickly notice prediction failure for repeat mode"
Revert commit 69a37bea (cpuidle: Quickly notice prediction failure for
repeat mode), because it has been identified as the source of a
significant performance regression in v3.8 and later as explained by
Jeremy Eder:
We believe we've identified a particular commit to the cpuidle code
that seems to be impacting performance of variety of workloads.
The simplest way to reproduce is using netperf TCP_RR test, so
we're using that, on a pair of Sandy Bridge based servers. We also
have data from a large database setup where performance is also
measurably/positively impacted, though that test data isn't easily
share-able.
Included below are test results from 3 test kernels:
kernel reverts
-----------------------------------------------------------
1) vanilla upstream (no reverts)
2) perfteam2 reverts e11538d1f0
3) test reverts 69a37beabf
e11538d1f0
In summary, netperf TCP_RR numbers improve by approximately 4%
after reverting 69a37beabf. When
69a37beabf is included, C0 residency
never seems to get above 40%. Taking that patch out gets C0 near
100% quite often, and performance increases.
The below data are histograms representing the %c0 residency @
1-second sample rates (using turbostat), while under netperf test.
- If you look at the first 4 histograms, you can see %c0 residency
almost entirely in the 30,40% bin.
- The last pair, which reverts 69a37beabf,
shows %c0 in the 80,90,100% bins.
Below each kernel name are netperf TCP_RR trans/s numbers for the
particular kernel that can be disclosed publicly, comparing the 3
test kernels. We ran a 4th test with the vanilla kernel where
we've also set /dev/cpu_dma_latency=0 to show overall impact
boosting single-threaded TCP_RR performance over 11% above
baseline.
3.10-rc2 vanilla RX + c0 lock (/dev/cpu_dma_latency=0):
TCP_RR trans/s 54323.78
-----------------------------------------------------------
3.10-rc2 vanilla RX (no reverts)
TCP_RR trans/s 48192.47
Receiver %c0
0.0000 - 10.0000 [ 1]: *
10.0000 - 20.0000 [ 0]:
20.0000 - 30.0000 [ 0]:
30.0000 - 40.0000 [ 59]:
***********************************************************
40.0000 - 50.0000 [ 1]: *
50.0000 - 60.0000 [ 0]:
60.0000 - 70.0000 [ 0]:
70.0000 - 80.0000 [ 0]:
80.0000 - 90.0000 [ 0]:
90.0000 - 100.0000 [ 0]:
Sender %c0
0.0000 - 10.0000 [ 1]: *
10.0000 - 20.0000 [ 0]:
20.0000 - 30.0000 [ 0]:
30.0000 - 40.0000 [ 11]: ***********
40.0000 - 50.0000 [ 49]:
*************************************************
50.0000 - 60.0000 [ 0]:
60.0000 - 70.0000 [ 0]:
70.0000 - 80.0000 [ 0]:
80.0000 - 90.0000 [ 0]:
90.0000 - 100.0000 [ 0]:
-----------------------------------------------------------
3.10-rc2 perfteam2 RX (reverts commit
e11538d1f0)
TCP_RR trans/s 49698.69
Receiver %c0
0.0000 - 10.0000 [ 1]: *
10.0000 - 20.0000 [ 1]: *
20.0000 - 30.0000 [ 0]:
30.0000 - 40.0000 [ 59]:
***********************************************************
40.0000 - 50.0000 [ 0]:
50.0000 - 60.0000 [ 0]:
60.0000 - 70.0000 [ 0]:
70.0000 - 80.0000 [ 0]:
80.0000 - 90.0000 [ 0]:
90.0000 - 100.0000 [ 0]:
Sender %c0
0.0000 - 10.0000 [ 1]: *
10.0000 - 20.0000 [ 0]:
20.0000 - 30.0000 [ 0]:
30.0000 - 40.0000 [ 2]: **
40.0000 - 50.0000 [ 58]:
**********************************************************
50.0000 - 60.0000 [ 0]:
60.0000 - 70.0000 [ 0]:
70.0000 - 80.0000 [ 0]:
80.0000 - 90.0000 [ 0]:
90.0000 - 100.0000 [ 0]:
-----------------------------------------------------------
3.10-rc2 test RX (reverts 69a37beabf
and e11538d1f0)
TCP_RR trans/s 47766.95
Receiver %c0
0.0000 - 10.0000 [ 1]: *
10.0000 - 20.0000 [ 1]: *
20.0000 - 30.0000 [ 0]:
30.0000 - 40.0000 [ 27]: ***************************
40.0000 - 50.0000 [ 2]: **
50.0000 - 60.0000 [ 0]:
60.0000 - 70.0000 [ 2]: **
70.0000 - 80.0000 [ 0]:
80.0000 - 90.0000 [ 0]:
90.0000 - 100.0000 [ 28]: ****************************
Sender:
0.0000 - 10.0000 [ 1]: *
10.0000 - 20.0000 [ 0]:
20.0000 - 30.0000 [ 0]:
30.0000 - 40.0000 [ 11]: ***********
40.0000 - 50.0000 [ 0]:
50.0000 - 60.0000 [ 1]: *
60.0000 - 70.0000 [ 0]:
70.0000 - 80.0000 [ 3]: ***
80.0000 - 90.0000 [ 7]: *******
90.0000 - 100.0000 [ 38]: **************************************
These results demonstrate gaining back the tendency of the CPU to
stay in more responsive, performant C-states (and thus yield
measurably better performance), by reverting commit
69a37beabf.
Requested-by: Jeremy Eder <jeder@redhat.com>
Tested-by: Len Brown <len.brown@intel.com>
Cc: 3.8+ <stable@vger.kernel.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
2013-07-29 13:32:29 +02:00 |
| .. |
|
alarmtimer.c
|
alarmtimer: Export symbols of functions declared in linux/alarmtimer.h
|
2013-06-12 14:02:12 -07:00 |
|
clockevents.c
|
clockevents: Implement unbind functionality
|
2013-05-16 11:09:18 +02:00 |
|
clocksource.c
|
clocksource: Reselect clocksource when watchdog validated high-res capability
|
2013-07-05 11:09:28 +02:00 |
|
jiffies.c
|
time: Kill xtime_lock, replacing it with jiffies_lock
|
2012-11-13 14:08:23 -05:00 |
|
Kconfig
|
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2013-05-15 14:05:17 -07:00 |
|
Makefile
|
sched_clock: Make ARM's sched_clock generic for all architectures
|
2013-06-12 14:02:13 -07:00 |
|
ntp.c
|
ntp: Remove unused variable flags in __hardpps
|
2013-05-28 13:45:19 -07:00 |
|
ntp_internal.h
|
ntp: Rework do_adjtimex to take timespec and tai arguments
|
2013-04-04 13:18:15 -07:00 |
|
posix-clock.c
|
|
|
|
sched_clock.c
|
ARM: sched_clock: Load cycle count after epoch stabilizes
|
2013-06-17 15:56:11 -07:00 |
|
tick-broadcast.c
|
tick: broadcast: Check broadcast mode on CPU hotplug
|
2013-07-12 12:35:40 +02:00 |
|
tick-common.c
|
tick: Sanitize broadcast control logic
|
2013-07-02 14:26:45 +02:00 |
|
tick-internal.h
|
clockevents: Define CS_NAME_LEN unconditionally
|
2013-05-28 09:28:02 +02:00 |
|
tick-oneshot.c
|
|
|
|
tick-sched.c
|
Revert "cpuidle: Quickly notice prediction failure for repeat mode"
|
2013-07-29 13:32:29 +02:00 |
|
timeconv.c
|
|
|
|
timekeeping.c
|
Merge branch 'timers/posix-cpu-timers-for-tglx' of
|
2013-07-04 23:11:22 +02:00 |
|
timekeeping_debug.c
|
power: Add option to log time spent in suspend
|
2013-05-29 12:57:34 -07:00 |
|
timekeeping_internal.h
|
power: Add option to log time spent in suspend
|
2013-05-29 12:57:34 -07:00 |
|
timer_list.c
|
timer_list: Convert timer list to be a proper seq_file
|
2013-04-17 20:51:02 +02:00 |
|
timer_stats.c
|
|
|