Messages in this thread | | | Subject | Re: [GIT PULL] cputime: Convert core use of cputime_t to nsecs | From | hejianet <> | Date | Tue, 21 Feb 2017 13:08:24 +0800 |
| |
Hi Frederic
Do we need to support CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=n on ppc64le?
If yes, I got a compiling error after applying your patch set:
arch/powerpc/kernel/time.c:712:2: error: implicit declaration of function ‘cputime_to_nsecs’ [-Werror=implicit-function-declaration] return local_clock() - cputime_to_nsecs(kcpustat_this_cpu->cpustat[CPUTIME_STEAL]); ^
I thought it is due to CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=n on my ppc64le server. My kernel config: # grep -n CONFIG_VIRT_CPU .config 136:CONFIG_VIRT_CPU_ACCOUNTING=y 137:CONFIG_VIRT_CPU_ACCOUNTING_GEN=y
B.R. Jia
On 30/01/2017 12:46 PM, Frederic Weisbecker wrote: > 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(-) >
| |