lkml.org 
[lkml]   [2017]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[GIT PULL] cputime: Convert core use of cputime_t to nsecs
    Date
    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(-)

    \
     
     \ /
      Last update: 2017-01-30 05:47    [W:4.099 / U:0.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site