kernel_optimize_test/drivers
Rafael J. Wysocki b26bf6ab71 cpuidle: New timer events oriented governor for tickless systems
The venerable menu governor does some things that are quite
questionable in my view.

First, it includes timer wakeups in the pattern detection data and
mixes them up with wakeups from other sources which in some cases
causes it to expect what essentially would be a timer wakeup in a
time frame in which no timer wakeups are possible (because it knows
the time until the next timer event and that is later than the
expected wakeup time).

Second, it uses the extra exit latency limit based on the predicted
idle duration and depending on the number of tasks waiting on I/O,
even though those tasks may run on a different CPU when they are
woken up.  Moreover, the time ranges used by it for the sleep length
correction factors depend on whether or not there are tasks waiting
on I/O, which again doesn't imply anything in particular, and they
are not correlated to the list of available idle states in any way
whatever.

Also, the pattern detection code in menu may end up considering
values that are too large to matter at all, in which cases running
it is a waste of time.

A major rework of the menu governor would be required to address
these issues and the performance of at least some workloads (tuned
specifically to the current behavior of the menu governor) is likely
to suffer from that.  It is thus better to introduce an entirely new
governor without them and let everybody use the governor that works
better with their actual workloads.

The new governor introduced here, the timer events oriented (TEO)
governor, uses the same basic strategy as menu: it always tries to
find the deepest idle state that can be used in the given conditions.
However, it applies a different approach to that problem.

First, it doesn't use "correction factors" for the time till the
closest timer, but instead it tries to correlate the measured idle
duration values with the available idle states and use that
information to pick up the idle state that is most likely to "match"
the upcoming CPU idle interval.

Second, it doesn't take the number of "I/O waiters" into account at
all and the pattern detection code in it avoids taking timer wakeups
into account.  It also only uses idle duration values less than the
current time till the closest timer (with the tick excluded) for that
purpose.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
2019-01-16 23:07:30 +01:00
..
accessibility
acpi arm64 fixes for -rc2 2019-01-11 12:25:40 -08:00
amba
android
ata for-linus-20190112 2019-01-12 13:40:51 -08:00
atm cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
auxdisplay
base Merge branches 'pm-cpuidle', 'pm-cpufreq' and 'pm-sleep' 2019-01-11 10:09:51 +01:00
bcma
block for-linus-20190112 2019-01-12 13:40:51 -08:00
bluetooth
bus
cdrom
char Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
clk
clocksource arch/csky patches for 4.21-rc1 2019-01-05 09:50:07 -08:00
connector
cpufreq Merge branches 'pm-cpuidle', 'pm-cpufreq' and 'pm-sleep' 2019-01-11 10:09:51 +01:00
cpuidle cpuidle: New timer events oriented governor for tickless systems 2019-01-16 23:07:30 +01:00
crypto cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
dax
dca
devfreq
dio
dma cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
dma-buf drivers/dma-buf/udmabuf.c: convert to use vm_fault_t 2019-01-04 13:13:46 -08:00
edac
eisa
extcon
firewire FireWire (IEEE 1394) subsystem patch: 2019-01-05 18:33:21 -08:00
firmware arm64 fixes for -rc1 2019-01-05 11:28:39 -08:00
fmc
fpga Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
fsi
gnss
gpio
gpu remove dma_zalloc_coherent 2019-01-12 10:52:40 -08:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid 2019-01-05 17:53:40 -08:00
hsi
hv
hwmon
hwspinlock hwspinlock: fix return value check in stm32_hwspinlock_probe() 2019-01-03 11:42:10 -08:00
hwtracing
i2c i2c: tegra: Fix Maximum transfer size 2019-01-11 00:15:04 +01:00
i3c
ide
idle
iio
infiniband cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
input cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
iommu cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
ipack
irqchip irqchip/csky: fixup handle_irq_perbit break irq 2019-01-09 00:18:46 +08:00
isdn
leds
lightnvm
macintosh Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
mailbox
mcb
md
media cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
memory ARM: SoC: late updates 2019-01-05 11:30:37 -08:00
memstick
message
mfd
misc cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
mmc cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
mtd mtd: rawnand: qcom: fix memory corruption that causes panic 2019-01-08 12:33:24 +01:00
mux
net cross-tree: phase out dma_zalloc_coherent() on headers 2019-01-08 07:58:49 -05:00
nfc
ntb cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
nubus
nvdimm
nvme for-linus-20190112 2019-01-12 13:40:51 -08:00
nvmem
of
opp cpufreq: scpi/scmi: Fix freeing of dynamic OPPs 2019-01-04 12:19:40 +01:00
oprofile
parisc
parport
pci remove dma_zalloc_coherent 2019-01-12 10:52:40 -08:00
pcmcia Included in this update: 2019-01-05 11:23:17 -08:00
perf drivers/perf: hisi: Fixup one DDRC PMU register offset 2019-01-04 10:13:27 +00:00
phy phy: fix build breakage: add PHY_MODE_SATA 2019-01-12 21:07:14 -08:00
pinctrl
platform chrome platform changes for v4.21 2019-01-06 11:40:06 -08:00
pnp Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
power
powercap
pps
ps3
ptp
pwm
rapidio cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
ras
regulator
remoteproc
reset reset: uniphier-glue: Add AHCI reset control support in glue layer 2019-01-07 16:38:51 +01:00
rpmsg
rtc
s390 cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
sbus
scsi cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
sfi
sh
siox
slimbus
sn
soc ARM: SoC fixes 2019-01-14 10:34:14 +12:00
soundwire
spi cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
spmi
ssb
staging Staging driver fixes for 5.0-rc2 2019-01-14 05:49:35 +12:00
target
tc
tee
thermal Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux 2019-01-05 16:07:28 -08:00
thunderbolt
tty tty/serial fixes for 5.0-rc2 2019-01-14 05:47:48 +12:00
uio
usb USB fixes for 5.0-rc2 2019-01-14 05:45:28 +12:00
uwb
vfio vfio/type1: Fix unmap overflow off-by-one 2019-01-08 09:31:28 -07:00
vhost Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
video cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
virt
virtio
visorbus
vlynq
vme
w1
watchdog
xen Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
zorro
Kconfig
Makefile