Skip to content

RFC nohz/cpuset: Start discussions on nohz CPUs

Steven Rostedt lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest32 patches 27 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/32nohz: Move nohz load balancer selection into idle logickernel/time/tick-sched.c+6 -52 replies
2/32cpuset: Set up interface for nohz flagarch/Kconfig include/linux/cpuset.h init/Kconfig +1 more+94 -11 reply
3/32nohz: Try not to give the timekeeping duty to an adaptive tickless cpukernel/time/tick-sched.c+41 -111 reply
4/32x86: New cpuset nohz irq vectorarch/x86/include/asm/entry_arch.h arch/x86/include/asm/hw_irq.h arch/x86/include/asm/irq_vectors.h +4 more+54 -14 replies
5/32nohz: Adaptive tick stop and restart on nohz cpusetarch/x86/kernel/smp.c include/linux/sched.h include/linux/tick.h +5 more+137 -121 reply
6/32nohz/cpuset: Dont turn off the tick if rcu needs itinclude/linux/rcupdate.h kernel/rcutree.c kernel/time/tick-sched.c+20 -61 reply
7/32nohz/cpuset: Wake up adaptive nohz CPU when a timer gets enqueuedinclude/linux/sched.h kernel/sched/core.c kernel/timer.c+30 -40 replies
8/32nohz/cpuset: Dont stop the tick if posix cpu timers are runninginclude/linux/posix-timers.h kernel/posix-cpu-timers.c kernel/time/tick-sched.c+17 -00 replies
9/32nohz/cpuset: Restart tick when nohz flag is cleared on cpusetinclude/linux/cpuset.h kernel/cpuset.c kernel/time/tick-sched.c+33 -21 reply
10/32nohz/cpuset: Restart the tick if printk needs itkernel/printk.c+14 -12 replies
11/32rcu: Restart the tick on non-responding adaptive nohz CPUskernel/rcutree.c+18 -00 replies
12/32rcu: Restart tick if we enqueue a callback in a nohz/cpuset CPUkernel/rcutree.c+7 -00 replies
13/32nohz: Generalize tickless cpu time accountinginclude/linux/kernel_stat.h include/linux/tick.h kernel/sched/cputime.c +2 more+90 -390 replies
14/32nohz/cpuset: Account user and system times in adaptive nohz modeinclude/linux/tick.h kernel/sched/core.c kernel/time/tick-sched.c+140 -20 replies
15/32nohz/cpuset: New API to flush cputimes on nohz cpusetsinclude/linux/cpuset.h include/linux/tick.h kernel/cpuset.c +1 more+52 -60 replies
16/32nohz/cpuset: Flush cputime on threads in nohz cpusets when waiting leaderkernel/exit.c+8 -00 replies
17/32nohz/cpuset: Flush cputimes on procfs stat file readfs/proc/array.c+2 -00 replies
18/32nohz/cpuset: Flush cputimes for getrusage() and times() syscallskernel/sys.c+6 -00 replies
19/32x86: Syscall hooks for nohz cpusetsarch/x86/kernel/ptrace.c+11 -00 replies
20/32nohz/cpuset: enable addition&removal of cpus while in adaptive nohz modekernel/cpuset.c+73 -380 replies
21/32nohz: Dont restart the tick before scheduling to idlekernel/time/tick-sched.c+11 -70 replies
22/32sched: Comment on rq->clock correctness in ttwu_do_wakeup() in nohzkernel/sched/core.c+6 -00 replies
23/32sched: Update rq clock on nohz CPU before migrating taskskernel/sched/core.c kernel/sched/sched.h+12 -00 replies
24/32sched: Update rq clock on nohz CPU before setting fair group shareskernel/sched/fair.c+5 -00 replies
25/32sched: Update rq clock on tickless CPUs before calling check_preempt_curr()kernel/sched/core.c+16 -10 replies
26/32sched: Update rq clock earlier in unthrottle_cfs_rqkernel/sched/fair.c+3 -20 replies
27/32sched: Update clock of nohz busiest rq before balancingkernel/sched/fair.c+17 -00 replies
28/32sched: Update rq clock before idle balancingkernel/sched/fair.c+1 -00 replies
29/32sched: Update nohz rq clock before searching busiest group on load balancingkernel/sched/fair.c+13 -00 replies
30/32rcu: Switch to extended quiescent state in userspace from nohz cpusetinclude/linux/tick.h kernel/time/tick-sched.c+28 -20 replies
31/32nohz/cpuset: Disable under some configsinit/Kconfig+1 -10 replies
32/32nohz, not for merge: Add tickless tracingarch/x86/kernel/smp.c kernel/cpuset.c kernel/time/tick-sched.c+10 -00 replies

Reviews trailers per patch

1 of 32 patches has a Reviewed-by or Acked-by.

PatchSteven Rostedt
1/32
2/32
3/32
4/32
5/32
6/32A-b
7/32
8/32
9/32
10/32
11/32
12/32
13/32
14/32
15/32
16/32
17/32
18/32
19/32
20/32
21/32
22/32
23/32
24/32
25/32
26/32
27/32
28/32
29/32
30/32
31/32
32/32

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [PATCH 00/32] [RFC] nohz/cpuset: Start discussions on nohz CPUs

A while ago Frederic posted a series of patches to get an idea on how to implement nohz cpusets. Where you can add a task to a cpuset and mark the set to be 'nohz'. When the task runs on a CPU and is the only task scheduled (nr_running == 1), the tick will stop. The idea is to give the task the least amount of kernel interference as possible. If the task doesn't do any system calls (and possibly even if it does), no timer interrupt will bother it. By using isocpus and nohz cpuset, a task would be able to achieve true cpu isolation.

This has been long asked for by those in the RT community. If a task requires uninterruptible CPU time, this would be able to give a task that, even without the full PREEMPT-RT patch set.

This patch set is not for inclusion. It is just to get the topic at the forefront again. The design requires more work and more discussion.

I ported Frederic's work to v3.7-rc3 and I'm posting it here so that people can comment on it. I just did the minimal to get it to compile and boot. I haven't done any real tests with it yet. I may have screwed some things up during the port, but that's OK, because the patch set will most likely require a rewrite anyway.

Please have a look, and lets get this out the door.

-- Steve

Frederic Weisbecker (31):
nohz: Move nohz load balancer selection into idle logic
cpuset: Set up interface for nohz flag
nohz: Try not to give the timekeeping duty to an adaptive tickless cpu
x86: New cpuset nohz irq vector
nohz: Adaptive tick stop and restart on nohz cpuset nohz/cpuset: Don't turn off the tick if rcu needs it nohz/cpuset: Wake up adaptive nohz CPU when a timer gets enqueued nohz/cpuset: Don't stop the tick if posix cpu timers are running nohz/cpuset: Restart tick when nohz flag is cleared on cpuset nohz/cpuset: Restart the tick if printk needs it
rcu: Restart the tick on non-responding adaptive nohz CPUs
rcu: Restart tick if we enqueue a callback in a nohz/cpuset CPU
nohz: Generalize tickless cpu time accounting
nohz/cpuset: Account user and system times in adaptive nohz mode nohz/cpuset: New API to flush cputimes on nohz cpusets nohz/cpuset: Flush cputime on threads in nohz cpusets when waiting leader nohz/cpuset: Flush cputimes on procfs stat file read nohz/cpuset: Flush cputimes for getrusage() and times() syscalls
x86: Syscall hooks for nohz cpusets
nohz: Don't restart the tick before scheduling to idle
sched: Comment on rq->clock correctness in ttwu_do_wakeup() in nohz
sched: Update rq clock on nohz CPU before migrating tasks
sched: Update rq clock on nohz CPU before setting fair group shares
sched: Update rq clock on tickless CPUs before calling check_preempt_curr()
sched: Update rq clock earlier in unthrottle_cfs_rq
sched: Update clock of nohz busiest rq before balancing
sched: Update rq clock before idle balancing
sched: Update nohz rq clock before searching busiest group on load balancing
rcu: Switch to extended quiescent state in userspace from nohz cpuset nohz/cpuset: Disable under some configs
nohz, not for merge: Add tickless tracing

Hakan Akkan (1):
nohz/cpuset: enable addition&removal of cpus while in adaptive nohz mode

----

 arch/Kconfig                       |    3 +
 arch/x86/include/asm/entry_arch.h  |    3 +
 arch/x86/include/asm/hw_irq.h      |    7 +
 arch/x86/include/asm/irq_vectors.h |    2 +
 arch/x86/include/asm/smp.h         |   11 +-
 arch/x86/kernel/entry_64.S         |    4 +
 arch/x86/kernel/irqinit.c          |    4 +
 arch/x86/kernel/ptrace.c           |   11 +
 arch/x86/kernel/smp.c              |   28 +++
 fs/proc/array.c                    |    2 +
 include/linux/cpuset.h             |   35 ++++
 include/linux/kernel_stat.h        |    2 +
 include/linux/posix-timers.h       |    1 +
 include/linux/rcupdate.h           |    1 +
 include/linux/sched.h              |   10 +-
 include/linux/tick.h               |   72 +++++--
 init/Kconfig                       |    8 +
 kernel/cpuset.c                    |  144 ++++++++++++-
 kernel/exit.c                      |    8 +
 kernel/posix-cpu-timers.c          |   12 ++
 kernel/printk.c                    |   15 +-
 kernel/rcutree.c                   |   28 ++-
 kernel/sched/core.c                |   82 +++++++-
 kernel/sched/cputime.c             |   22 ++
 kernel/sched/fair.c                |   41 +++-
 kernel/sched/sched.h               |   18 ++
 kernel/softirq.c                   |    6 +-
 kernel/sys.c                       |    6 +
 kernel/time/tick-sched.c           |  398 ++++++++++++++++++++++++++++++++----
 kernel/time/timer_list.c           |    3 +-
 kernel/timer.c                     |    2 +-
 31 files changed, 912 insertions(+), 77 deletions(-)