kernel_optimize_test/kernel/irq
Daniel Lezcano bbba0e7c5c genirq/timings: Add array suffix computation code
The previous approach based on the variance was discarding values from
the timings when they were considered as anomalies as stated by the
normal law statistical model.

However in the interrupt life, there can be multiple anomalies due to the
nature of the device generating the interrupts, and most of the time a
repeating pattern can be observed, that is particulary true for network,
console, MMC or SSD devices.

The variance approach missed the patterns and it was only able to deal with
the interrupt coming in regular intervals, thus reducing considerably the
scope of what is predictable.

In order to find out the repeating patterns, the interrupt intervals are
grouped in a ilog2 basis to create a suite of numbers with small
amplitude. Every group contains an exponential moving average of the values
belonging to the group. The array suffix, a data structure used for string
searching, data compression, etc ..., is built from the suite of numbers
and the suffixes are then searched in this suite.

The tests showed the algorithm is able to find all repeating patterns,
as well as regular interval in less than 1us on x86-i7.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: rjw@rjwysocki.net
Cc: ulf.hansson@linaro.org
Cc: linux-pm@vger.kernel.org
Link: https://lkml.kernel.org/r/20190328151336.5316-2-daniel.lezcano@linaro.org
2019-04-05 22:51:29 +02:00
..
affinity.c genirq/affinity: Remove the leftovers of the original set support 2019-02-18 11:21:29 +01:00
autoprobe.c genirq: Cleanup top of file comments 2018-03-20 14:23:27 +01:00
chip.c This is the bulk of GPIO changes for the v5.1 cycle: 2019-03-08 10:09:53 -08:00
cpuhotplug.c genirq: Add missing SPDX identifiers 2018-03-20 14:23:28 +01:00
debug.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk 2018-02-01 13:36:15 -08:00
debugfs.c irqchip updates for Linux 5.1 2019-02-23 10:53:31 +01:00
devres.c genirq/devres: Remove excess parameter from kernel doc 2019-03-22 13:34:12 +01:00
dummychip.c genirq: Add missing SPDX identifiers 2018-03-20 14:23:28 +01:00
generic-chip.c genirq: Add missing SPDX identifiers 2018-03-20 14:23:28 +01:00
handle.c genirq: Correctly annotate implicit fall through 2019-01-15 10:40:53 +01:00
internals.h irqchip updates for Linux 5.1 2019-02-23 10:53:31 +01:00
ipi.c genirq: Fix various typos in comments 2018-12-18 14:22:28 +01:00
irq_sim.c irq/irq_sim: add irq_set_type() callback 2019-02-19 17:42:28 +01:00
irqdesc.c irqchip updates for Linux 5.1 2019-02-23 10:53:31 +01:00
irqdomain.c This is the bulk of GPIO changes for the v5.1 cycle: 2019-03-08 10:09:53 -08:00
Kconfig genirq/irqchip: Remove MULTI_IRQ_HANDLER as it's now obselete 2018-08-03 12:14:10 +02:00
Makefile
manage.c genirq: Prevent use-after-free and work list corruption 2019-03-24 22:13:17 +01:00
matrix.c genirq/matrix: Improve target CPU selection for managed interrupts. 2018-11-06 23:20:13 +01:00
migration.c genirq/migration: Avoid out of line call if pending is not set 2018-06-06 15:18:20 +02:00
msi.c genirq/core: Introduce struct irq_affinity_desc 2018-12-19 11:32:08 +01:00
pm.c genirq: Add missing SPDX identifiers 2018-03-20 14:23:28 +01:00
proc.c genirq: Speedup show_interrupts() 2018-06-22 14:22:58 +02:00
resend.c genirq: Cleanup top of file comments 2018-03-20 14:23:27 +01:00
settings.h
spurious.c genirq: Fix various typos in comments 2018-12-18 14:22:28 +01:00
timings.c genirq/timings: Add array suffix computation code 2019-04-05 22:51:29 +02:00