From: Frederic Weisbecker <fweisbec@gmail.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Frederic Weisbecker <fweisbec@gmail.com>,
Tony Luck <tony.luck@intel.com>,
Wanpeng Li <wanpeng.li@hotmail.com>,
Peter Zijlstra <peterz@infradead.org>,
Michael Ellerman <mpe@ellerman.id.au>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Thomas Gleixner <tglx@linutronix.de>,
Paul Mackerras <paulus@samba.org>,
Fenghua Yu <fenghua.yu@intel.com>, Rik van Riel <riel@redhat.com>,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Stanislaw Gruszka <sgruszka@redhat.com>
Subject: [GIT PULL] cputime: Convert core use of cputime_t to nsecs
Date: Mon, 30 Jan 2017 05:46:43 +0100 [thread overview]
Message-ID: <1485751603-15913-1-git-send-email-fweisbec@gmail.com> (raw)
Ingo,
Please pull the cputime/nsecs-for-tip branch that can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
cputime/nsecs-for-tip
HEAD: 14d889bef71ff808c450f82bcd257b10f05bb061
The patches are the same than on my previous post: https://lwn.net/Articles/712213/
If you apply them by email, just please ignore the very last one
([PATCH 37/37] s390: Prevent from cputime leaks) because we need to find
a better solution with Martin. The branch doesn't have this patch.
--- Summary ---
cputime_t is a type that can map to different time units and
granularities: jiffies, nsecs or architecture clock.
This type and its accessors and mutators have been designed to deal
with all these time units that can vary depending on the kernel config
in order to support a model where the cputime is stored as-is under
the source unit.
The pro here with this model is to avoid expensive conversions from the
source unit cputime to a more generic type during the accounting hotpath.
Especially for config that have CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=y.
Now there are several cons:
* we need to maintain a whole set of cputime_t mutators and accessors
for all implementations of cputime_t (currently 4 of them). And we
need such function for every kind of time conversion: to/from
jiffies, nsecs, usecs, timeval, clock_t, ...
* The core code needs to deal with different possible granularities
of cputime_t while converting to/from another time unit.
Especially functions like nsecs_to_cputime() can leak some nsecs
remainder. This adds more complexity and even sometimes performance
loss (involving reverse conversion) in order to avoid losing such
time remainder (eg: irqtime accounting, steal time accounting, posix
cpu timers, ...).
* Kernel developers are seldom familiar with these granularity issues:
cputime leaks often appear in patches dealing with cputime code.
* In general cputime_t, as a varying type, is more opaque and harder
to deal with than static nsecs. Making the core code less readable.
This patchset removes all core use of cputime_t and stores the cputime
into nsecs units. Only s390 and powerpc
(with CONFIG_VIRT_CPU_ACCOUNTING_NATIVE for the latter) now still use
cputime_t.
Many code get simplified, the diffstat is appealing and some fastpath
should even have a small performance gain (irqtime and steal time
accounting).
Now lets admit one drawback: s390 and powerpc with
CONFIG_VIRT_CPU_ACCOUNTING_NATIVE have new cputime_t to nsecs conversion
on cputime accounting path. But this should be leveraged by the recent
changes which delay the cputime accounting to tick and context switch.
Thanks,
Frederic
---
Frederic Weisbecker (36):
jiffies: Reuse TICK_NSEC instead of NSEC_PER_JIFFY
time: Introduce jiffies64_to_nsecs()
sched: Remove unused INIT_CPUTIME macro
cputime: Convert kcpustat to nsecs
macintosh/rack-meter: Remove cputime_t internal use
cputime: Convert guest time accounting to nsecs
cputime: Special API to return old-typed cputime
cputime: Convert task/group cputime to nsecs
alpha: Convert obsolete cputime_t to nsecs
x86: Convert obsolete cputime type to nsecs
isdn: Convert obsolete cputime type to nsecs
binfmt: Convert obsolete cputime type to nsecs
acct: Convert obsolete cputime type to nsecs
delaycct: Convert obsolete cputime type to nsecs
tsacct: Convert obsolete cputime type to nsecs
signal: Convert obsolete cputime type to nsecs
cputime: Increment kcpustat directly on irqtime account
posix-timers: Use TICK_NSEC instead of a dynamically ad-hoc calculated version
posix-timers: Convert internals to use nsecs
itimer: Convert internal cputime_t units to nsec
sched: Remove temporary cputime_t accessors
cputime: Push time to account_user_time() in nsecs
cputime: Push time to account_steal_time() in nsecs
cputime: Push time to account_idle_time() in nsecs
cputime: Push time to account_system_time() in nsecs
cputime: Complete nsec conversion of tick based accounting
vtime: Return nsecs instead of cputime_t to account
cputime: Remove jiffies based cputime
ia64: Move nsecs based cputime headers to the last arch using it
ia64: Convert vtime to use nsec units directly
ia64: Remove unused cputime definitions
s390: Make arch_cpu_idle_time() to return nsecs
powerpc: Remove unused cputime definitions
s390: Remove unused cputime definitions
cputime: Remove unused nsec_to_cputime
cputime: Remove asm generic headers
arch/alpha/include/asm/Kbuild | 1 -
arch/alpha/kernel/osf_sys.c | 10 +-
arch/arc/include/asm/Kbuild | 1 -
arch/arm/include/asm/Kbuild | 1 -
arch/arm64/include/asm/Kbuild | 1 -
arch/avr32/include/asm/Kbuild | 1 -
arch/blackfin/include/asm/Kbuild | 1 -
arch/c6x/include/asm/Kbuild | 1 -
arch/cris/include/asm/Kbuild | 1 -
arch/frv/include/asm/Kbuild | 1 -
arch/h8300/include/asm/Kbuild | 1 -
arch/hexagon/include/asm/Kbuild | 1 -
arch/ia64/include/asm/cputime.h | 6 +-
arch/ia64/kernel/head.S | 4 +-
arch/ia64/kernel/time.c | 17 ++--
arch/m32r/include/asm/Kbuild | 1 -
arch/m68k/include/asm/Kbuild | 1 -
arch/metag/include/asm/Kbuild | 1 -
arch/microblaze/include/asm/Kbuild | 1 -
arch/mips/include/asm/Kbuild | 1 -
arch/mips/kernel/binfmt_elfn32.c | 12 +--
arch/mips/kernel/binfmt_elfo32.c | 12 +--
arch/mn10300/include/asm/Kbuild | 1 -
arch/nios2/include/asm/Kbuild | 1 -
arch/openrisc/include/asm/Kbuild | 1 -
arch/parisc/include/asm/Kbuild | 1 -
arch/parisc/kernel/binfmt_elf32.c | 11 +--
arch/powerpc/include/asm/cputime.h | 177 +---------------------------------
arch/powerpc/kernel/time.c | 45 +++------
arch/s390/appldata/appldata_os.c | 16 +--
arch/s390/include/asm/cputime.h | 109 +--------------------
arch/s390/kernel/idle.c | 9 +-
arch/s390/kernel/vtime.c | 16 +--
arch/score/include/asm/Kbuild | 1 -
arch/sh/include/asm/Kbuild | 1 -
arch/sparc/include/asm/Kbuild | 1 -
arch/tile/include/asm/Kbuild | 1 -
arch/um/include/asm/Kbuild | 1 -
arch/unicore32/include/asm/Kbuild | 1 -
arch/x86/include/asm/Kbuild | 1 -
arch/x86/kernel/apm_32.c | 6 +-
arch/x86/kvm/hyperv.c | 5 +-
arch/xtensa/include/asm/Kbuild | 1 -
drivers/cpufreq/cpufreq.c | 6 +-
drivers/cpufreq/cpufreq_governor.c | 2 +-
drivers/cpufreq/cpufreq_stats.c | 1 -
drivers/isdn/mISDN/stack.c | 4 +-
drivers/macintosh/rack-meter.c | 28 +++---
fs/binfmt_elf.c | 15 +--
fs/binfmt_elf_fdpic.c | 14 +--
fs/compat_binfmt_elf.c | 18 +---
fs/proc/array.c | 16 +--
fs/proc/stat.c | 64 ++++++------
fs/proc/uptime.c | 7 +-
include/asm-generic/cputime.h | 15 ---
include/asm-generic/cputime_jiffies.h | 75 --------------
include/asm-generic/cputime_nsecs.h | 121 -----------------------
include/linux/compat.h | 20 +++-
include/linux/cputime.h | 7 +-
include/linux/jiffies.h | 2 +
include/linux/kernel_stat.h | 13 ++-
include/linux/posix-timers.h | 14 +--
include/linux/sched.h | 62 +++++-------
include/trace/events/timer.h | 26 ++---
kernel/acct.c | 7 +-
kernel/delayacct.c | 6 +-
kernel/exit.c | 4 +-
kernel/fork.c | 2 +-
kernel/sched/cpuacct.c | 2 +-
kernel/sched/cputime.c | 166 +++++++++++++------------------
kernel/sched/sched.h | 7 +-
kernel/sched/stats.h | 4 +-
kernel/signal.c | 12 +--
kernel/sys.c | 16 +--
kernel/time/itimer.c | 60 ++++--------
kernel/time/jiffies.c | 32 +++---
kernel/time/posix-cpu-timers.c | 170 ++++++++++++--------------------
kernel/time/time.c | 10 ++
kernel/time/timeconst.bc | 6 ++
kernel/tsacct.c | 21 ++--
80 files changed, 436 insertions(+), 1102 deletions(-)
next reply other threads:[~2017-01-30 4:47 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-30 4:46 Frederic Weisbecker [this message]
2017-01-30 14:32 ` Stanislaw Gruszka
2017-01-30 14:56 ` Frederic Weisbecker
2017-01-30 15:29 ` Stanislaw Gruszka
2017-01-31 3:09 ` [PATCH RESEND 01/36] jiffies: Reuse TICK_NSEC instead of NSEC_PER_JIFFY Frederic Weisbecker
2017-02-01 9:49 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 02/36] time: Introduce jiffies64_to_nsecs() Frederic Weisbecker
2017-02-01 9:50 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 03/36] sched: Remove unused INIT_CPUTIME macro Frederic Weisbecker
2017-02-01 9:50 ` [tip:sched/core] sched/cputime: Remove the " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 04/36] cputime: Convert kcpustat to nsecs Frederic Weisbecker
2017-02-01 9:51 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 05/36] macintosh/rack-meter: Remove cputime_t internal use Frederic Weisbecker
2017-02-01 9:51 ` [tip:sched/core] macintosh/rack-meter: Convert cputime64_t use to u64 tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 06/36] cputime: Convert guest time accounting to nsecs Frederic Weisbecker
2017-02-01 9:52 ` [tip:sched/core] sched/cputime: Convert guest time accounting to nsecs (u64) tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 07/36] cputime: Special API to return old-typed cputime Frederic Weisbecker
2017-02-01 9:52 ` [tip:sched/core] sched/cputime: Introduce special task_cputime_t() " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 08/36] cputime: Convert task/group cputime to nsecs Frederic Weisbecker
2017-02-01 9:53 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 09/36] alpha: Convert obsolete cputime_t " Frederic Weisbecker
2017-02-01 9:53 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 10/36] x86: Convert obsolete cputime type " Frederic Weisbecker
2017-02-01 9:54 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 11/36] isdn: " Frederic Weisbecker
2017-02-01 9:54 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 12/36] binfmt: " Frederic Weisbecker
2017-02-01 9:55 ` [tip:sched/core] fs/binfmt: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 13/36] acct: " Frederic Weisbecker
2017-02-01 9:55 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 14/36] delaycct: " Frederic Weisbecker
2017-02-01 9:56 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 15/36] tsacct: " Frederic Weisbecker
2017-02-01 9:56 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 16/36] signal: " Frederic Weisbecker
2017-02-01 9:57 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 17/36] cputime: Increment kcpustat directly on irqtime account Frederic Weisbecker
2017-02-01 9:58 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 18/36] posix-timers: Use TICK_NSEC instead of a dynamically ad-hoc calculated version Frederic Weisbecker
2017-02-01 9:58 ` [tip:sched/core] timers/posix-timers: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 19/36] posix-timers: Convert internals to use nsecs Frederic Weisbecker
2017-02-01 9:59 ` [tip:sched/core] timers/posix-timers: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 20/36] itimer: Convert internal cputime_t units to nsec Frederic Weisbecker
2017-02-01 9:59 ` [tip:sched/core] timers/itimer: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 21/36] sched: Remove temporary cputime_t accessors Frederic Weisbecker
2017-02-01 10:00 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 22/36] cputime: Push time to account_user_time() in nsecs Frederic Weisbecker
2017-02-01 10:00 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 23/36] cputime: Push time to account_steal_time() " Frederic Weisbecker
2017-02-01 10:01 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 24/36] cputime: Push time to account_idle_time() " Frederic Weisbecker
2017-02-01 10:01 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 25/36] cputime: Push time to account_system_time() " Frederic Weisbecker
2017-02-01 10:02 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 26/36] cputime: Complete nsec conversion of tick based accounting Frederic Weisbecker
2017-02-01 10:02 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 27/36] vtime: Return nsecs instead of cputime_t to account Frederic Weisbecker
2017-02-01 10:03 ` [tip:sched/core] sched/cputime, " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 28/36] cputime: Remove jiffies based cputime Frederic Weisbecker
2017-02-01 10:03 ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 29/36] ia64: Move nsecs based cputime headers to the last arch using it Frederic Weisbecker
2017-02-01 10:04 ` [tip:sched/core] ia64, sched/cputime: Move the " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 30/36] ia64: Convert vtime to use nsec units directly Frederic Weisbecker
2017-02-01 10:04 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 31/36] ia64: Remove unused cputime definitions Frederic Weisbecker
2017-02-01 10:05 ` [tip:sched/core] ia64, sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 32/36] s390: Make arch_cpu_idle_time() to return nsecs Frederic Weisbecker
2017-02-01 10:05 ` [tip:sched/core] s390, sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 33/36] powerpc: Remove unused cputime definitions Frederic Weisbecker
2017-02-01 10:06 ` [tip:sched/core] powerpc, sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 34/36] s390: " Frederic Weisbecker
2017-02-01 10:06 ` [tip:sched/core] s390, sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 35/36] cputime: Remove unused nsec_to_cputime Frederic Weisbecker
2017-02-01 10:07 ` [tip:sched/core] sched/cputime: Remove unused nsec_to_cputime() tip-bot for Frederic Weisbecker
2017-01-31 3:09 ` [PATCH RESEND 36/36] cputime: Remove asm generic headers Frederic Weisbecker
2017-02-01 10:07 ` [tip:sched/core] sched/cputime: Remove generic asm headers tip-bot for Frederic Weisbecker
2017-02-06 13:49 ` [GIT PULL] cputime: Convert core use of cputime_t to nsecs Frederic Weisbecker
2017-02-07 8:08 ` Ingo Molnar
2017-02-07 14:06 ` Frederic Weisbecker
2017-02-07 18:41 ` Ingo Molnar
2017-02-21 5:08 ` hejianet
2017-02-22 14:30 ` Frederic Weisbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1485751603-15913-1-git-send-email-fweisbec@gmail.com \
--to=fweisbec@gmail.com \
--cc=benh@kernel.crashing.org \
--cc=fenghua.yu@intel.com \
--cc=heiko.carstens@de.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=schwidefsky@de.ibm.com \
--cc=sgruszka@redhat.com \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=wanpeng.li@hotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®