[GIT PULL] cputime: Full dynticks task/cputime accounting v7

From: Frederic Weisbecker
Date: Mon Jan 28 2013 - 14:03:58 EST


Ingo,

Please pull the new full dynticks cputime accounting code that
can be found at:

git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
tags/full-dynticks-cputime-for-mingo

My last concern is the dependency on CONFIG_64BIT. We rely on cputime_t
being u64 for reasonable nanosec granularity implementation. And therefore
we need a single instruction fetch to read kernel cpustat for atomicity
requirement against concurrent incrementation, which only 64 bit archs
can provide.

It's probably no big deal to solve this issue. What we need is simply some
atomic accessors.

There is just no emergency though as this new option depends on the context
tracking subsystem that only x86-64 (and soon ppc64) implements yet. And
this set is complex enough already. I think we can deal with that later.

Thanks.

---
This implements the cputime accounting on full dynticks CPUs.

Typical cputime stats infrastructure relies on the timer tick and
its periodic polling on the CPU to account the amount of time
spent by the CPUs and the tasks per high level domains such as
userspace, kernelspace, guest, ...

Now we are preparing to implement full dynticks capability on
Linux for Real Time and HPC users who want full CPU isolation.
This feature requires a cputime accounting that doesn't depend
on the timer tick.

To implement it, this new cputime infrastructure plugs into
kernel/user/guest boundaries to take snapshots of cputime and
flush these to the stats when needed. This performs pretty
much like CONFIG_VIRT_CPU_ACCOUNTING except that context location
and cputime snaphots are synchronized between write and read
side such that the latter can safely retrieve the pending tickless
cputime of a task and add it to its latest cputime snapshot to
return the correct result to the user.

Signed-off-by: Frederic Weisbecker <fweisbec@xxxxxxxxx>
---

Changes since v6:

* Fix build error with kvm modules (Thanks Sedat Dilek and
Wu Fenguang)

* Fix mistyped header inclusion in ia64

* Fix more missing symbols for kvm

---
Frederic Weisbecker (8):
context_tracking: Export context state for generic vtime
cputime: Librarize per nsecs resolution cputime definitions
cputime: Move default nsecs_to_cputime() to jiffies based cputime
file
cputime: Generic on-demand virtual cputime accounting
cputime: Allow dynamic switch between tick/virtual based cputime
accounting
cputime: Use accessors to read task cputime stats
kvm: Prepare to add generic guest entry/exit callbacks
cputime: Safely read cputime of full dynticks CPUs

arch/alpha/kernel/osf_sys.c | 6 +-
arch/ia64/include/asm/cputime.h | 92 +--------
arch/ia64/include/asm/thread_info.h | 4 +-
arch/ia64/include/asm/xen/minstate.h | 2 +-
arch/ia64/kernel/asm-offsets.c | 2 +-
arch/ia64/kernel/entry.S | 16 +-
arch/ia64/kernel/fsys.S | 4 +-
arch/ia64/kernel/head.S | 4 +-
arch/ia64/kernel/ivt.S | 8 +-
arch/ia64/kernel/minstate.h | 2 +-
arch/ia64/kernel/time.c | 5 +-
arch/powerpc/configs/chroma_defconfig | 2 +-
arch/powerpc/configs/corenet64_smp_defconfig | 2 +-
arch/powerpc/configs/pasemi_defconfig | 2 +-
arch/powerpc/include/asm/cputime.h | 6 +-
arch/powerpc/include/asm/lppaca.h | 2 +-
arch/powerpc/include/asm/ppc_asm.h | 4 +-
arch/powerpc/kernel/entry_64.S | 4 +-
arch/powerpc/kernel/time.c | 5 +-
arch/powerpc/platforms/pseries/dtl.c | 6 +-
arch/powerpc/platforms/pseries/setup.c | 6 +-
arch/s390/kernel/vtime.c | 6 +-
arch/x86/kernel/apm_32.c | 11 +-
drivers/isdn/mISDN/stack.c | 7 +-
fs/binfmt_elf.c | 8 +-
fs/binfmt_elf_fdpic.c | 7 +-
fs/proc/array.c | 4 +-
include/asm-generic/cputime.h | 66 +-----
include/asm-generic/cputime_jiffies.h | 72 ++++++
include/asm-generic/cputime_nsecs.h | 104 +++++++++
include/linux/context_tracking.h | 28 +++
include/linux/hardirq.h | 4 +-
include/linux/init_task.h | 11 +
include/linux/kernel_stat.h | 2 +-
include/linux/kvm_host.h | 55 ++++-
include/linux/sched.h | 40 ++++
include/linux/tsacct_kern.h | 3 +
include/linux/vtime.h | 59 ++++--
init/Kconfig | 23 ++-
kernel/acct.c | 6 +-
kernel/context_tracking.c | 43 +++--
kernel/cpu.c | 4 +-
kernel/delayacct.c | 7 +-
kernel/exit.c | 10 +-
kernel/fork.c | 6 +
kernel/posix-cpu-timers.c | 28 ++-
kernel/sched/core.c | 1 +
kernel/sched/cputime.c | 298 +++++++++++++++++++++++---
kernel/signal.c | 12 +-
kernel/softirq.c | 6 +-
kernel/time/tick-sched.c | 5 +-
kernel/tsacct.c | 44 +++-
52 files changed, 842 insertions(+), 322 deletions(-)
create mode 100644 include/asm-generic/cputime_jiffies.h
create mode 100644 include/asm-generic/cputime_nsecs.h

--
1.7.5.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/