From: "H. Peter Anvin" <hpa@zytor.com>
To: Borislav Petkov <bp@alien8.de>,
Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>,
Andy Lutomirski <luto@kernel.org>, X86 ML <x86@kernel.org>,
Denys Vlasenko <vda.linux@googlemail.com>,
Brian Gerst <brgerst@gmail.com>,
Denys Vlasenko <dvlasenk@redhat.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: Thu, 30 Apr 2015 14:39:07 -0700 [thread overview]
Message-ID: <5542A0FB.50707@zytor.com> (raw)
In-Reply-To: <20150428183820.GJ19025@pd.tnic>
[-- Attachment #1: Type: text/plain, Size: 167 bytes --]
This is the microbenchmark I used.
For the record, Intel's intention going forward is that 0F 1F will
always be as fast or faster than any other alternative.
-hpa
[-- Attachment #2: nopltest.c --]
[-- Type: text/plain, Size: 2429 bytes --]
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#include <sys/time.h>
static void nop_p6(void)
{
asm volatile(".rept 1000\n"
".byte 0x0f,0x1f,0x44,0x00,0x00\n"
".endr");
}
static void nop_k8(void)
{
asm volatile(".rept 1000\n"
".byte 0x66,0x66,0x66,0x66,0x90\n"
".endr");
}
static void nop_lea(void)
{
#ifdef __x86_64__
asm volatile(".rept 1000\n"
".byte 0x48,0x8d,0x74,0x26,0x00\n"
".endr");
#else
asm volatile(".rept 1000\n"
".byte 0x3e,0x8d,0x74,0x26,0x00\n"
".endr");
#endif
}
static void nop_jmp5(void)
{
asm volatile(".rept 1000\n"
".byte 0xe9,0,0,0,0\n"
".endr");
}
static void nop_jmp2(void)
{
asm volatile(".rept 1000\n"
".byte 0xeb,3,0x90,0x90,0x90\n"
".endr");
}
static void nop_xchg(void)
{
asm volatile(".rept 1000\n"
".byte 0x66,0x66,0x66,0x87,0xc0\n"
".endr");
}
static void nop_mov(void)
{
asm volatile(".rept 1000\n"
".byte 0x66,0x66,0x66,0x89,0xc0\n"
".endr");
}
static void nop_fdisi(void)
{
asm volatile(".rept 1000\n"
".byte 0x66,0x66,0x66,0xdb,0xe1\n"
".endr");
}
static void nop_feni(void)
{
asm volatile(".rept 1000\n"
".byte 0x66,0x66,0x66,0xdb,0xe0\n"
".endr");
}
struct test_list {
const char *name;
void (*func)(void);
};
static const struct test_list tests[] = {
{ "P6 NOPs (NOPL)", nop_p6 },
{ "K8 NOPs (66 90)", nop_k8 },
{ "LEA", nop_lea },
{ "XCHG", nop_xchg },
{ "MOV", nop_mov },
{ "FDISI", nop_fdisi },
{ "FENI", nop_feni },
{ "E9 JMP", nop_jmp5 },
{ "EB JMP", nop_jmp2 },
{ NULL, NULL }
};
static void benchmark(const struct test_list *test, bool warmup)
{
struct timeval tv0, tv1;
int i;
const int reps = 100000;
unsigned long long us;
gettimeofday(&tv0, NULL);
for (i = 0; i < reps; i++)
test->func();
gettimeofday(&tv1, NULL);
us = (tv1.tv_sec - tv0.tv_sec) * 1000000ULL +
((int)tv1.tv_usec - (int)tv0.tv_usec);
if (!warmup)
printf("%s: %d repetitions at %llu us\n", test->name, reps, us);
}
int main(void)
{
const struct test_list *test;
for (test = tests; test->func; test++) {
benchmark(test, true);
benchmark(test, false);
}
return 0;
}
next prev parent reply other threads:[~2015-04-30 21:39 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-24 2:15 [PATCH] x86_64, asm: Work around AMD SYSRET SS descriptor attribute issue 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 [this message]
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
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=5542A0FB.50707@zytor.com \
--to=hpa@zytor.com \
--cc=ast@plumgrid.com \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=dvlasenk@redhat.com \
--cc=fweisbec@gmail.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 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.