Messages in this thread | | | From | Frederic Weisbecker <> | Subject | [GIT PULL] nohz: Tick dependency mask | Date | Mon, 15 Feb 2016 02:08:40 +0100 |
| |
Ingo, Thomas,
Please pull the timers/core-v8 branch that can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git timers/core-v8
HEAD: 0378c8b4f541116843c5d19b403bb6145fa1030e
--- Currently in nohz full configs, the tick dependency is checked asynchronously by nohz code from interrupt and context switch for each concerned subsystem with a set of function provided by these. Such functions are made of many conditions and details that can be heavyweight as they are called on fastpath: sched_can_stop_tick(), posix_cpu_timer_can_stop_tick(), perf_event_can_stop_tick()...
Thomas suggested a few month ago to make that tick dependency check synchronous. Instead of checking subsystems details from each interrupt to guess if the tick can be stopped, every subsystem that may have a tick dependency should set itself a flag specifying the state of that dependency. This way we can verify if we can stop the tick with a single lightweight mask check on fast path.
This conversion from a pull to a push model to implement tick dependency is the core feature of this patchset that is split into:
* Nohz wide kick simplification * Improve nohz tracing * Introduce tick dependency mask * Migrate scheduler, posix timers, perf events and sched clock tick dependencies to the tick dependency mask.
Thanks, Frederic ---
Frederic Weisbecker (9): atomic: Export fetch_or() nohz: Implement wide kick on top of irq work nohz: New tick dependency mask nohz: Use enum code for tick stop failure tracing message perf: Migrate perf to use new tick dependency mask model sched: Account rr tasks sched: Migrate sched to use new tick dependency mask model posix-cpu-timers: Migrate to use new tick dependency mask model sched-clock: Migrate to use new tick dependency mask model
include/linux/atomic.h | 21 +++++ include/linux/perf_event.h | 6 -- include/linux/posix-timers.h | 3 - include/linux/sched.h | 11 ++- include/linux/tick.h | 97 ++++++++++++++++++++++- include/trace/events/timer.h | 36 +++++++-- kernel/events/core.c | 65 +++++++++++---- kernel/sched/clock.c | 5 ++ kernel/sched/core.c | 49 +++++------- kernel/sched/rt.c | 16 ++++ kernel/sched/sched.h | 48 +++++++---- kernel/time/posix-cpu-timers.c | 52 +++--------- kernel/time/tick-sched.c | 175 ++++++++++++++++++++++++++++++++--------- kernel/time/tick-sched.h | 1 + 14 files changed, 424 insertions(+), 161 deletions(-)
| |