This series reduces the number of IPIs on my workload by something like 99%. It's down from many hundreds per second to very few.
The basic idea behind this series is to make TIF_POLLING_NRFLAG be a reliable indication that the idle task is polling. Once that's done, the rest is reasonably straightforward. Patches 1 and 2 are related improvements: patch 1 teaches the cpuidle polling loop how to poll, and patch 2 adds tracepoints so that avoided IPIs are visible. Patch 3 is the main semantic change, patch 4 is cleanup, and patch 5 is peterz's code, rebased on top of my stuff, and fixed up a bit. Changes from v1: - Squashed the two idle loop rearrangement patches. - Improved comments. Andy Lutomirski (4): cpuidle: Set polling in poll_idle sched,trace: Add a tracepoint for IPI-less remote wakeups sched,idle: Clear polling before descheduling the idle thread sched,idle: Simplify wake_up_idle_cpu Peter Zijlstra (1): sched: Optimize ttwu IPI drivers/cpuidle/driver.c | 7 ++-- include/trace/events/sched.h | 20 +++++++++++ kernel/sched/core.c | 79 +++++++++++++++++++++++++++++--------------- kernel/sched/idle.c | 30 ++++++++++++++++- kernel/sched/sched.h | 6 ++++ 5 files changed, 113 insertions(+), 29 deletions(-) -- 1.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

