From: Borislav Petkov <bp@alien8.de>
To: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Andy Lutomirski <luto@amacapital.net>,
Andy Lutomirski <luto@kernel.org>, X86 ML <x86@kernel.org>,
"H. Peter Anvin" <hpa@zytor.com>,
Denys Vlasenko <vda.linux@googlemail.com>,
Brian Gerst <brgerst@gmail.com>, Ingo Molnar <mingo@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
Oleg Nesterov <oleg@redhat.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Alexei Starovoitov <ast@plumgrid.com>,
Will Drewry <wad@chromium.org>, Kees Cook <keescook@chromium.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Mel Gorman <mgorman@suse.com>
Subject: Re: [PATCH] x86_64, asm: Work around AMD SYSRET SS descriptor attribute issue
Date: Tue, 28 Apr 2015 15:40:12 +0200 [thread overview]
Message-ID: <20150428134012.GC19025@pd.tnic> (raw)
In-Reply-To: <20150427194512.GK28871@pd.tnic>
On Mon, Apr 27, 2015 at 09:45:12PM +0200, Borislav Petkov wrote:
> > Maybe you are measuring random noise.
>
> Yeah. Last exercise tomorrow. Let's see what those numbers would look
> like.
Right, so with Mel's help, I did a simple microbenchmark to measure how
many cycles a syscall (getpid()) needs on 4.1-rc1 and with your patch.
4.1-rc1
-------
Running 60 times, 10000000 loops per run.
Cycles: 3977233027, cycles/syscall: 397.723303
Cycles: 3964979519, cycles/syscall: 396.497952
Cycles: 3962470261, cycles/syscall: 396.247026
Cycles: 3963524693, cycles/syscall: 396.352469
Cycles: 3962853704, cycles/syscall: 396.285370
Cycles: 3964603727, cycles/syscall: 396.460373
Cycles: 3964758926, cycles/syscall: 396.475893
Cycles: 3965268019, cycles/syscall: 396.526802
Cycles: 3962198683, cycles/syscall: 396.219868
...
4.1-rc1 + 17be0aec74fb036eb4eb32c2268f3420a034762b from tip
-----------------------------------------------------------
Running 60 times, 10000000 loops per run.
Cycles: 3973575441, cycles/syscall: 397.357544
Cycles: 3963999393, cycles/syscall: 396.399939
Cycles: 3962613575, cycles/syscall: 396.261357
Cycles: 3963440408, cycles/syscall: 396.344041
Cycles: 3963475255, cycles/syscall: 396.347526
Cycles: 3964471785, cycles/syscall: 396.447179
Cycles: 3962890513, cycles/syscall: 396.289051
Cycles: 3964940114, cycles/syscall: 396.494011
Cycles: 3964186426, cycles/syscall: 396.418643
...
So yeah, your patch is fine - provided I've done everything right. Here's
the microbenchmark:
---
/*
* How to run:
*
* taskset -c <cpunum> ./sys
*/
#include <stdio.h>
#include <sys/syscall.h>
#include <stdlib.h>
#include <unistd.h>
typedef unsigned long long u64;
#define DECLARE_ARGS(val, low, high) unsigned low, high
#define EAX_EDX_VAL(val, low, high) ((low) | ((u64)(high) << 32))
#define EAX_EDX_ARGS(val, low, high) "a" (low), "d" (high)
#define EAX_EDX_RET(val, low, high) "=a" (low), "=d" (high)
static __always_inline unsigned long long rdtsc(void)
{
DECLARE_ARGS(val, low, high);
asm volatile("rdtsc" : EAX_EDX_RET(val, low, high));
return EAX_EDX_VAL(val, low, high);
}
static long my_getpid(void)
{
long ret;
asm volatile ("syscall" :
"=a" (ret) :
"a" (SYS_getpid) :
"memory", "cc", "rcx", "r11");
return ret;
}
static inline u64 read_tsc(void)
{
u64 ret;
asm volatile("mfence");
ret = rdtsc();
asm volatile("mfence");
return ret;
}
int main()
{
int i, j;
u64 p1, p2;
u64 count = 0;
#define TIMES 60
#define LOOPS 10000000ULL
printf("Running %d times, %lld loops per run.\n", TIMES, LOOPS);
for (j = 0; j < TIMES; j++) {
for (i = 0; i < LOOPS; i++) {
p1 = read_tsc();
my_getpid();
p2 = read_tsc();
count += (p2 - p1);
}
printf("Cycles: %lld, cycles/syscall: %f\n",
count, (double)count / LOOPS);
count = 0;
}
return 0;
}
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
--
next prev parent reply other threads:[~2015-04-28 13:40 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-24 2:15 Andy Lutomirski
2015-04-24 2:18 ` Andy Lutomirski
2015-04-26 12:34 ` Denys Vlasenko
2015-04-24 3:58 ` Brian Gerst
2015-04-24 9:59 ` Denys Vlasenko
2015-04-24 10:59 ` Borislav Petkov
2015-04-24 19:58 ` Borislav Petkov
2015-04-24 11:27 ` Denys Vlasenko
2015-04-24 12:00 ` Brian Gerst
2015-04-24 16:25 ` Linus Torvalds
2015-04-24 17:33 ` Brian Gerst
2015-04-24 17:41 ` Linus Torvalds
2015-04-24 17:57 ` Brian Gerst
2015-04-24 20:21 ` Andy Lutomirski
2015-04-24 20:46 ` Denys Vlasenko
2015-04-24 20:50 ` Andy Lutomirski
2015-04-24 21:45 ` H. Peter Anvin
2015-04-24 21:45 ` H. Peter Anvin
2015-04-24 21:45 ` H. Peter Anvin
2015-04-24 21:45 ` H. Peter Anvin
2015-04-24 21:45 ` H. Peter Anvin
2015-04-24 21:45 ` H. Peter Anvin
2015-04-25 2:17 ` Denys Vlasenko
2015-04-26 23:36 ` Andy Lutomirski
2015-04-24 20:53 ` Linus Torvalds
2015-04-25 21:12 ` Borislav Petkov
2015-04-26 11:22 ` perf numbers (was: Re: [PATCH] x86_64, asm: Work around AMD SYSRET SS descriptor attribute issue) Borislav Petkov
2015-04-26 23:39 ` [PATCH] x86_64, asm: Work around AMD SYSRET SS descriptor attribute issue Andy Lutomirski
2015-04-27 8:53 ` Borislav Petkov
2015-04-27 10:07 ` Denys Vlasenko
2015-04-27 10:09 ` Borislav Petkov
2015-04-27 11:35 ` Borislav Petkov
2015-04-27 12:08 ` Denys Vlasenko
2015-04-27 12:48 ` Borislav Petkov
2015-04-27 14:57 ` Linus Torvalds
2015-04-27 15:06 ` Linus Torvalds
2015-04-27 15:35 ` Borislav Petkov
2015-04-27 15:46 ` Borislav Petkov
2015-04-27 15:56 ` Andy Lutomirski
2015-04-27 16:04 ` Brian Gerst
2015-04-27 16:10 ` Denys Vlasenko
2015-04-27 16:00 ` Linus Torvalds
2015-04-27 16:40 ` Borislav Petkov
2015-04-27 18:14 ` Linus Torvalds
2015-04-27 18:38 ` Borislav Petkov
2015-04-27 18:47 ` Linus Torvalds
2015-04-27 18:53 ` Borislav Petkov
2015-04-27 19:59 ` H. Peter Anvin
2015-04-27 20:03 ` Borislav Petkov
2015-04-27 20:14 ` H. Peter Anvin
2015-04-28 15:55 ` Borislav Petkov
2015-04-28 16:28 ` Linus Torvalds
2015-04-28 16:58 ` Borislav Petkov
2015-04-28 17:16 ` Linus Torvalds
2015-04-28 18:38 ` Borislav Petkov
2015-04-30 21:39 ` H. Peter Anvin
2015-04-30 23:23 ` H. Peter Anvin
2015-05-01 9:03 ` Borislav Petkov
2015-05-03 11:51 ` Borislav Petkov
2015-04-27 19:11 ` Borislav Petkov
2015-04-27 19:21 ` Denys Vlasenko
2015-04-27 19:45 ` Borislav Petkov
2015-04-28 13:40 ` Borislav Petkov [this message]
2015-04-27 16:12 ` Denys Vlasenko
2015-04-27 18:12 ` Linus Torvalds
2015-04-27 18:47 ` Borislav Petkov
2015-04-27 14:39 ` Borislav Petkov
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=20150428134012.GC19025@pd.tnic \
--to=bp@alien8.de \
--cc=ast@plumgrid.com \
--cc=brgerst@gmail.com \
--cc=dvlasenk@redhat.com \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=mgorman@suse.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=rostedt@goodmis.org \
--cc=torvalds@linux-foundation.org \
--cc=vda.linux@googlemail.com \
--cc=wad@chromium.org \
--cc=x86@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome