From: Stefani Seibold <stefani@seibold.net>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Greg KH <gregkh@linuxfoundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
X86 ML <x86@kernel.org>, Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
Andi Kleen <ak@linux.intel.com>,
Andrea Arcangeli <aarcange@redhat.com>,
John Stultz <john.stultz@linaro.org>,
Pavel Emelyanov <xemul@parallels.com>,
Cyrill Gorcunov <gorcunov@openvz.org>,
andriy.shevchenko@linux.intel.com,
Martin.Runge@rohde-schwarz.com, Andreas.Brief@rohde-schwarz.com
Subject: Re: Final: Add 32 bit VDSO time function support
Date: Fri, 28 Feb 2014 08:22:04 +0100 [thread overview]
Message-ID: <1393572124.1019.3.camel@wall-e.seibold.net> (raw)
In-Reply-To: <CALCETrW_PHbDzn2S3NyGTSk4yqYjnpJbStCuLc_yBGdfspfFCA@mail.gmail.com>
Am Mittwoch, den 26.02.2014, 16:55 -0800 schrieb Andy Lutomirski:
> Um. This code doesn't work. I'll send a patch. I can't speak
> towards how well it compiles in different configurations.
>
> I can't speak towards how well it compiles in different
> configurations. Also, vdso_fallback_gettime needs .cfi annotations, I
> think. I could probably dredge the required incantations from
> somewhere, but someone else may know how to do it.
>
> Once I patch it to work, your 32-bit code is considerably faster than
> the 64-bit case. It's enough faster that I suspect a bug. Dumping
> the in-memory shows some rather suspicious nops before the rdtsc
> instruction. I suspect that you've forgotten to run the 32-bit vdso
> through the alternatives code. The is a nasty bug: it will appear to
> work, but you'll see non-monotonic times on some SMP systems.
>
I didn't know this. My basic test case is a KVM which defaults to 1 cpu.
Thanks for discovering the issue.
> In my configuration, with your patches, I get (64-bit):
>
> CLOCK_REALTIME:
> 100000000 loops in 2.07105s = 20.71 nsec / loop
> 100000000 loops in 2.06874s = 20.69 nsec / loop
> 100000000 loops in 2.29415s = 22.94 nsec / loop
> CLOCK_MONOTONIC:
> 100000000 loops in 2.06526s = 20.65 nsec / loop
> 100000000 loops in 2.10134s = 21.01 nsec / loop
> 100000000 loops in 2.10615s = 21.06 nsec / loop
> CLOCK_REALTIME_COARSE:
> 100000000 loops in 0.37440s = 3.74 nsec / loop
> [ 503.011756] perf samples too long (2550 > 2500), lowering
> kernel.perf_event_max_sample_rate to 50000
> 100000000 loops in 0.37399s = 3.74 nsec / loop
> 100000000 loops in 0.38445s = 3.84 nsec / loop
> CLOCK_MONOTONIC_COARSE:
> 100000000 loops in 0.40238s = 4.02 nsec / loop
> 100000000 loops in 0.40939s = 4.09 nsec / loop
> 100000000 loops in 0.41152s = 4.12 nsec / loop
>
> Without the patches, I get:
>
> CLOCK_REALTIME:
> 100000000 loops in 2.07348s = 20.73 nsec / loop
> 100000000 loops in 2.07346s = 20.73 nsec / loop
> 100000000 loops in 2.06922s = 20.69 nsec / loop
> CLOCK_MONOTONIC:
> 100000000 loops in 1.98955s = 19.90 nsec / loop
> 100000000 loops in 1.98895s = 19.89 nsec / loop
> 100000000 loops in 1.98881s = 19.89 nsec / loop
> CLOCK_REALTIME_COARSE:
> 100000000 loops in 0.37462s = 3.75 nsec / loop
> 100000000 loops in 0.37460s = 3.75 nsec / loop
> 100000000 loops in 0.37428s = 3.74 nsec / loop
> CLOCK_MONOTONIC_COARSE:
> 100000000 loops in 0.40081s = 4.01 nsec / loop
> 100000000 loops in 0.39834s = 3.98 nsec / loop
> [ 36.706696] perf samples too long (2565 > 2500), lowering
> kernel.perf_event_max_sample_rate to 50000
> 100000000 loops in 0.39949s = 3.99 nsec / loop
>
> This looks like a wash, except for CLOCK_MONOTONIC, which got a bit
> slower. I'll send a followup patch once the bugs are fixed that
> improves the timings to:
>
> CLOCK_REALTIME:
> 100000000 loops in 2.08621s = 20.86 nsec / loop
> 100000000 loops in 2.07122s = 20.71 nsec / loop
> 100000000 loops in 2.07089s = 20.71 nsec / loop
> CLOCK_MONOTONIC:
> 100000000 loops in 2.06831s = 20.68 nsec / loop
> 100000000 loops in 2.06862s = 20.69 nsec / loop
> 100000000 loops in 2.06195s = 20.62 nsec / loop
> CLOCK_REALTIME_COARSE:
> 100000000 loops in 0.37274s = 3.73 nsec / loop
> 100000000 loops in 0.37247s = 3.72 nsec / loop
> 100000000 loops in 0.37234s = 3.72 nsec / loop
> CLOCK_MONOTONIC_COARSE:
> 100000000 loops in 0.39944s = 3.99 nsec / loop
> 100000000 loops in 0.39940s = 3.99 nsec / loop
> 100000000 loops in 0.40054s = 4.01 nsec / loop
>
> I'm not quite sure that causes the remaining loss.
>
> Test code is here:
>
> https://gitorious.org/linux-test-utils/linux-clock-tests
next prev parent reply other threads:[~2014-02-28 7:22 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-26 19:34 Final: Add 32 bit VDSO time function support Stefani Seibold
2014-02-26 20:10 ` Andy Lutomirski
2014-02-26 20:45 ` Greg KH
2014-02-26 20:54 ` Andy Lutomirski
2014-02-27 0:55 ` Andy Lutomirski
2014-02-27 1:02 ` [PATCH 0/2] Improvements/fixes to 32-bit vdso timing Andy Lutomirski
2014-02-27 1:02 ` [PATCH 1/2] x86: Mark __vdso entries as asmlinkage Andy Lutomirski
2014-02-27 3:25 ` H. Peter Anvin
2014-02-27 3:39 ` Andi Kleen
2014-02-27 5:06 ` H. Peter Anvin
2014-02-27 5:19 ` Andy Lutomirski
2014-02-27 5:22 ` H. Peter Anvin
2014-02-27 20:11 ` Andy Lutomirski
2014-02-27 23:12 ` H. Peter Anvin
2014-02-27 5:07 ` H. Peter Anvin
2014-02-27 1:02 ` [PATCH 2/2] x86: Inline the CLOCK_MONOTONIC vdso code Andy Lutomirski
2014-02-28 0:18 ` [PATCH v2 0/4] vDSO fixes, on top of tip/x86/vdso Andy Lutomirski
2014-02-28 0:18 ` [PATCH v2 1/4] x86: Use the default ABI for the 32-bit vDSO Andy Lutomirski
2014-02-28 7:28 ` Stefani Seibold
2014-02-28 15:06 ` H. Peter Anvin
2014-02-28 20:19 ` Andy Lutomirski
2014-03-01 13:43 ` Stefani Seibold
2014-02-28 0:18 ` [PATCH v2 2/4] x86: Inline the CLOCK_MONOTONIC vdso code Andy Lutomirski
2014-02-28 0:18 ` [PATCH v2 3/4] x86: Patch alternatives in the 32-bit vDSO Andy Lutomirski
2014-02-28 7:22 ` Stefani Seibold
2014-03-01 14:04 ` Stefani Seibold
2014-02-28 0:18 ` [PATCH v2 4/4] x86: Zero-pad the VVAR page Andy Lutomirski
2014-02-28 7:33 ` [PATCH v2 0/4] vDSO fixes, on top of tip/x86/vdso Stefani Seibold
2014-02-28 20:15 ` Andy Lutomirski
2014-03-01 14:02 ` Stefani Seibold
2014-02-28 7:22 ` Stefani Seibold [this message]
2014-03-01 2:00 ` Final: Add 32 bit VDSO time function support Andy Lutomirski
2014-03-01 22:56 ` H. Peter Anvin
2014-03-02 8:01 ` Stefani Seibold
2014-02-27 5:07 ` H. Peter Anvin
2014-02-27 12:14 ` Ingo Molnar
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=1393572124.1019.3.camel@wall-e.seibold.net \
--to=stefani@seibold.net \
--cc=Andreas.Brief@rohde-schwarz.com \
--cc=Martin.Runge@rohde-schwarz.com \
--cc=aarcange@redhat.com \
--cc=ak@linux.intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=gorcunov@openvz.org \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=john.stultz@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xemul@parallels.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.