0a960ba529
This is a simple IRQ balancer that polls every X number of milliseconds and moves IRQs from the most interrupt-heavy CPU to the least interrupt-heavy CPUs until the heaviest CPU is no longer the heaviest. IRQs are only moved from one source CPU to any number of destination CPUs per balance run. Balancing is skipped if the gap between the most interrupt-heavy CPU and the least interrupt-heavy CPU is below the configured threshold of interrupts. The heaviest IRQs are targeted for migration in order to reduce the number of IRQs to migrate. If moving an IRQ would reduce overall balance, then it won't be migrated. The most interrupt-heavy CPU is calculated by scaling the number of new interrupts on that CPU to the CPU's current capacity. This way, interrupt heaviness takes into account factors such as thermal pressure and time spent processing interrupts rather than just the sheer number of them. This also makes SBalance aware of CPU asymmetry, where different CPUs can have different performance capacities and be proportionally balanced. Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com> |
||
---|---|---|
.. | ||
affinity.c | ||
autoprobe.c | ||
chip.c | ||
cpuhotplug.c | ||
debug.h | ||
debugfs.c | ||
devres.c | ||
dummychip.c | ||
generic-chip.c | ||
handle.c | ||
internals.h | ||
ipi.c | ||
irq_sim.c | ||
irqdesc.c | ||
irqdomain.c | ||
Kconfig | ||
Makefile | ||
manage.c | ||
matrix.c | ||
migration.c | ||
msi.c | ||
pm.c | ||
proc.c | ||
resend.c | ||
sbalance.c | ||
settings.h | ||
spurious.c | ||
timings.c |