Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964907AbcKQSIx (ORCPT ); Thu, 17 Nov 2016 13:08:53 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:33363 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932176AbcKQSIu (ORCPT ); Thu, 17 Nov 2016 13:08:50 -0500 From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Tony Luck , Wanpeng Li , Peter Zijlstra , Michael Ellerman , Heiko Carstens , Benjamin Herrenschmidt , Thomas Gleixner , Paul Mackerras , Ingo Molnar , Fenghua Yu , Rik van Riel , Martin Schwidefsky , Stanislaw Gruszka Subject: [PATCH 00/36] cputime: Convert core use of cputime_t to nsecs Date: Thu, 17 Nov 2016 19:08:07 +0100 Message-Id: <1479406123-24785-1-git-send-email-fweisbec@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 7330 Lines: 151 I'm sorry for the patchbomb, especially as I usually complain about these myself but I don't see any way to split this patchset into standalone pieces, none of which would make any sense... All I can do is to isolate about 3 cleanup patches. So currently, cputime_t serves the purpose, for s390 and powerpc (on CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=y), to avoid converting arch clock counters to nanosecs or jiffies while accounting cputime. But this comes at the cost of a lot of complexity and uglification in the core code to deal with such an opaque type that relies on lots of mutators and accessors in order to deal with a random granularity time unit that also involve lots of workarounds and likely some performance penalties. So this patchset proposes to convert most of the cputime_t uses to nsecs. In the end it's only used by s390 and powerpc. This all comes at the expense of those two archs which then need to perform a cputime_to_nsec() conversion everytime they update the cputime to the core. Now I expect we can leverage this performance loss with flushing the cputime only on ticks so that we accumulate time as cputime_t in between and make the conversions more rare. git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git cputime/nsecs-v2 HEAD: cf109941db5da247569ee99a6effe00f62537082 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 | 14 +-- 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 | 11 --- arch/mips/kernel/binfmt_elfo32.c | 11 --- 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 | 10 -- arch/powerpc/include/asm/cputime.h | 177 +--------------------------------- arch/powerpc/kernel/time.c | 33 ++----- arch/s390/appldata/appldata_os.c | 16 +-- arch/s390/include/asm/cputime.h | 109 +-------------------- arch/s390/kernel/idle.c | 7 +- arch/s390/kernel/vtime.c | 14 +-- 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 | 20 ++-- 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/cputime.h | 7 +- include/linux/jiffies.h | 2 + include/linux/kernel_stat.h | 9 +- 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 | 165 +++++++++++++------------------ 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 ++-- 79 files changed, 408 insertions(+), 1085 deletions(-)