lkml.org 
[lkml]   [2020]   [Jan]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: timers/core] lib/vdso: Mark do_hres() and do_coarse() as __always_inline
    The following commit has been merged into the timers/core branch of tip:

    Commit-ID: c966533f8c6c45f93c52599f8460e7695f0b7eaa
    Gitweb: https://git.kernel.org/tip/c966533f8c6c45f93c52599f8460e7695f0b7eaa
    Author: Andrei Vagin <avagin@gmail.com>
    AuthorDate: Tue, 12 Nov 2019 01:26:51
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitterDate: Tue, 14 Jan 2020 12:20:48 +01:00

    lib/vdso: Mark do_hres() and do_coarse() as __always_inline

    Performance numbers for Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
    (more clock_gettime() cycles - the better):

    clock | before | after | diff
    ----------------------------------------------------------
    monotonic | 153222105 | 166775025 | 8.8%
    monotonic-coarse | 671557054 | 691513017 | 3.0%
    monotonic-raw | 147116067 | 161057395 | 9.5%
    boottime | 153446224 | 166962668 | 9.1%

    The improvement for arm64 for monotonic and boottime is around 3.5%.

    clock | before | after | diff
    ==================================================
    monotonic 17326692 17951770 3.6%
    monotonic-coarse 43624027 44215292 1.3%
    monotonic-raw 17541809 17554932 0.1%
    boottime 17334982 17954361 3.5%

    [ tglx: Avoid the goto ]

    Signed-off-by: Andrei Vagin <avagin@gmail.com>
    Signed-off-by: Dmitry Safonov <dima@arista.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/20191112012724.250792-3-dima@arista.com


    ---
    lib/vdso/gettimeofday.c | 14 ++++++++------
    1 file changed, 8 insertions(+), 6 deletions(-)

    diff --git a/lib/vdso/gettimeofday.c b/lib/vdso/gettimeofday.c
    index fac9e86..b453d24 100644
    --- a/lib/vdso/gettimeofday.c
    +++ b/lib/vdso/gettimeofday.c
    @@ -38,7 +38,7 @@ u64 vdso_calc_delta(u64 cycles, u64 last, u64 mask, u32 mult)
    }
    #endif

    -static int do_hres(const struct vdso_data *vd, clockid_t clk,
    +static __always_inline int do_hres(const struct vdso_data *vd, clockid_t clk,
    struct __kernel_timespec *ts)
    {
    const struct vdso_timestamp *vdso_ts = &vd->basetime[clk];
    @@ -68,8 +68,8 @@ static int do_hres(const struct vdso_data *vd, clockid_t clk,
    return 0;
    }

    -static int do_coarse(const struct vdso_data *vd, clockid_t clk,
    - struct __kernel_timespec *ts)
    +static __always_inline int do_coarse(const struct vdso_data *vd, clockid_t clk,
    + struct __kernel_timespec *ts)
    {
    const struct vdso_timestamp *vdso_ts = &vd->basetime[clk];
    u32 seq;
    @@ -99,13 +99,15 @@ __cvdso_clock_gettime_common(clockid_t clock, struct __kernel_timespec *ts)
    */
    msk = 1U << clock;
    if (likely(msk & VDSO_HRES))
    - return do_hres(&vd[CS_HRES_COARSE], clock, ts);
    + vd = &vd[CS_HRES_COARSE];
    else if (msk & VDSO_COARSE)
    return do_coarse(&vd[CS_HRES_COARSE], clock, ts);
    else if (msk & VDSO_RAW)
    - return do_hres(&vd[CS_RAW], clock, ts);
    + vd = &vd[CS_RAW];
    + else
    + return -1;

    - return -1;
    + return do_hres(vd, clock, ts);
    }

    static __maybe_unused int
    \
     
     \ /
      Last update: 2020-01-14 14:04    [W:4.286 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site