qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@amd.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	avi@redhat.com, Gleb Natapov <gleb@redhat.com>,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] cpuid problem in upstream qemu with kvm
Date: Wed, 16 Dec 2009 15:23:14 +0100	[thread overview]
Message-ID: <4B28ED52.40605@amd.com> (raw)
In-Reply-To: <4B2699BB.1090302@codemonkey.ws>

Anthony Liguori wrote:
> Gleb Natapov wrote:
>>> I thought KVM emulates the syscall instruction?  I swear I've seen
>>> patches for that.
>>>
>>>     
>> It is. Starting from 2.6.32.
>>   
> 
> Okay, so this is a performance vs. migration compatibility issue then?
> 
> BTW, couldn't we just not advertise syscall in cpuid?
Looks like a good idea, but at least Linux does not care ;-)
In 64-on-64 bit mode syscall is unconditionally used, which is OK, since 
it is architectural to AMD64. Intel integrated this, too.
In 32bit legacy mode AMD supports both syscall and sysenter, but mostly 
sysenter is used when the SEP CPUID bit is on. Intel does not support 
syscall, but this also is not advertised when CPUID is executed in 32bit.
In 32-on-64 compat mode the support is exclusive: AMD does not support 
sysenter, Intel does not support syscall. Since the AMD CPUID 
advertising is (at least) a bit "unfortunate" here ;-), Linux does not 
care about the bits, but unconditionally uses syscall on AMD and 
sysenter on Intel. See arch/x86/kernel/cpu/intel.c:early_init_intel():
#ifdef CONFIG_X86_64
     set_cpu_cap(c, X86_FEATURE_SYSENTER32);
#else
A similiar line is in cpu/amd.c:early_init_amd().
Then in arch/x86/vdso/vdso32-setup.c:sysenter_setup() these bit are used 
to populate the VDSO page. In the whole process CPUID feature bits are 
not honored, so you cannot get around it.
The only solution would be to inject neither AMD or Intel (I used 
VirtualLinux) in the past. This works fine for Linux (even better than 
the other two, since no vendor-specific workarounds are triggered), but 
64bit Windows refuses to boot on anything other than AuthenticAMD, 
GenuineIntel or CentaurHauls. Linux would then use int80h, which is 
slower than syscall or sysenter, but still much faster than emulation.

So given the whole mess I'd recommend to copy over Avi's "propagate 
local vendor" solution, as this solves the problem for 99.9+% of the 
cases. The remaining cases are cross-vendor migration, where we are fine 
with the 2.6.32 syscall/sysenter emulation. Although this is not as slow 
as one thinks (I measured less than 5% slowdown in kernbench), I'd not 
recommend it for common usage except cross-vendor migration.

BTW: Windows is not affected at all with this compat mode issue, because 
32bit applications switch to 64bit mode before doing the actual system 
call (which uses the 64bit syscall instruction).

> That should fix 
> it too without sacrificing migration compatibility.  We get a slight 
> slowdown on AMD hosts
I think there would be no slowdown. At least Linux only cares about this 
bit if in legacy 32bit mode, but here it uses sysenter anyway if this is 
present:
 From arch/x86/vdso/vdso32-setup.c:
#else  /* CONFIG_X86_32 */
#define vdso32_sysenter()   (boot_cpu_has(X86_FEATURE_SEP))
#define vdso32_syscall()    (0)

> but that's probably minor compared to the cost of 
> using emulated syscall on Intel hosts.


Regards,
Andre.


-- 
Andre Przywara
AMD-Operating System Research Center (OSRC), Dresden, Germany
Tel: +49 351 448 3567 12
----to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Andrew Bowd; Thomas M. McCoy; Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632

      parent reply	other threads:[~2009-12-16 14:23 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-14 19:35 [Qemu-devel] cpuid problem in upstream qemu with kvm Michael S. Tsirkin
2009-12-14 19:44 ` Anthony Liguori
2009-12-14 19:44   ` Michael S. Tsirkin
2009-12-14 19:57     ` Anthony Liguori
2009-12-14 20:00       ` Gleb Natapov
2009-12-14 20:02         ` Anthony Liguori
2009-12-14 20:08           ` Gleb Natapov
2009-12-14 20:14             ` Michael S. Tsirkin
2009-12-14 20:10           ` Michael S. Tsirkin
2009-12-14 20:18             ` Anthony Liguori
2009-12-14 20:31               ` Michael S. Tsirkin
2009-12-14 20:54                 ` Anthony Liguori
2009-12-14 21:10                   ` Michael S. Tsirkin
2009-12-14 21:49                     ` Anthony Liguori
2009-12-15 14:28                       ` Michael S. Tsirkin
2009-12-15 17:37                         ` Anthony Liguori
2009-12-15 17:56                           ` Michael S. Tsirkin
2009-12-20  9:42                             ` Avi Kivity
2009-12-20  9:49               ` Avi Kivity
2009-12-20 14:48                 ` Anthony Liguori
2009-12-20 14:55                   ` Avi Kivity
2009-12-20 15:33                     ` Anthony Liguori
2009-12-20 15:36                       ` Avi Kivity
2009-12-20 15:38                         ` Gleb Natapov
2009-12-20 15:40                           ` Avi Kivity
2009-12-20 15:49                             ` Michael S. Tsirkin
2009-12-20 15:53                               ` Avi Kivity
2009-12-20 15:51                 ` Michael S. Tsirkin
2009-12-20 15:59                   ` Avi Kivity
2009-12-20 16:56                     ` Michael S. Tsirkin
2009-12-20 17:17                       ` Alexander Graf
2009-12-20 17:18                         ` Michael S. Tsirkin
2009-12-20 17:23                           ` Alexander Graf
2009-12-20 17:23                           ` Gleb Natapov
2009-12-20 17:29                             ` Alexander Graf
2009-12-20 17:37                               ` Gleb Natapov
2009-12-20 17:59                                 ` Anthony Liguori
2009-12-20 18:06                                   ` Alexander Graf
2009-12-21  7:48                                     ` Gleb Natapov
2009-12-21 13:25                                       ` [Qemu-devel] " Paolo Bonzini
2009-12-20 18:12                                   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-21  7:43                                   ` Gleb Natapov
2009-12-21  8:28                                     ` Dor Laor
2009-12-21 22:51                                       ` john cooper
2009-12-22 13:54                                         ` Dor Laor
2009-12-22 15:19                                           ` john cooper
2009-12-22 16:12                                       ` Anthony Liguori
2010-01-05  6:06                                         ` john cooper
2010-01-06  8:02                                           ` [Qemu-devel] " Paolo Bonzini
     [not found]                                         ` <4B31F1BA.10005@redhat.com>
2010-01-06  0:10                                           ` [Qemu-devel] " Anthony Liguori
2010-01-06  3:25                                             ` Avi Kivity
2010-01-06 13:25                                               ` Anthony Liguori
2010-01-06 13:35                                                 ` Michael S. Tsirkin
2010-01-06 13:47                                                 ` Avi Kivity
2010-01-06 13:49                                                   ` Anthony Liguori
2010-01-06 13:54                                                     ` Avi Kivity
2010-01-06 13:55                                                       ` Alexander Graf
2010-01-06 13:58                                                         ` Avi Kivity
2010-01-06 14:22                                                           ` Michael S. Tsirkin
2010-01-06 14:32                                                             ` Avi Kivity
2010-01-06 14:48                                                               ` Dor Laor
2010-01-06 15:16                                                                 ` Anthony Liguori
2010-01-07  8:03                                                                   ` Dor Laor
2010-01-07  8:18                                                                     ` Avi Kivity
2010-01-07  9:11                                                                       ` Dor Laor
2010-01-07  9:24                                                                         ` Avi Kivity
2010-01-07  9:40                                                                           ` Dor Laor
2010-01-07 11:39                                                                             ` Anthony Liguori
2010-01-07 11:44                                                                               ` Dor Laor
2010-01-07 12:00                                                                                 ` Avi Kivity
2010-01-07 12:20                                                                                   ` Dor Laor
2010-01-07 12:33                                                                                     ` Anthony Liguori
2010-01-07 12:40                                                                                       ` Avi Kivity
2010-01-07 12:47                                                                                         ` Daniel P. Berrange
2010-01-07 12:50                                                                                           ` Avi Kivity
2010-01-07 13:14                                                                                         ` Anthony Liguori
2010-01-07 13:42                                                                                           ` Dor Laor
2010-01-11 13:26                                                                                         ` Markus Armbruster
2010-01-07 11:59                                                                             ` Avi Kivity
2010-01-07 12:17                                                                               ` Dor Laor
2010-01-07  8:24                                                                     ` Daniel P. Berrange
2010-01-07  9:13                                                                       ` Dor Laor
2010-01-06 15:02                                                               ` Michael S. Tsirkin
2010-01-06 15:12                                                       ` Anthony Liguori
2010-01-06  9:44                                             ` Daniel P. Berrange
2010-01-06  9:54                                               ` Avi Kivity
2010-01-06 10:21                                                 ` Daniel P. Berrange
2010-01-06 10:25                                                   ` Avi Kivity
2010-01-06 16:19                                             ` Lennart Sorensen
2009-12-21 11:15                                   ` Avi Kivity
2009-12-21 12:59                                     ` Andre Przywara
2009-12-21 16:14                                       ` Avi Kivity
2009-12-22 23:02                                   ` Jamie Lokier
2009-12-21 11:12                           ` Avi Kivity
2009-12-21 11:18                             ` Michael S. Tsirkin
2009-12-21 11:22                               ` Alexander Graf
2009-12-21 11:38                                 ` Michael S. Tsirkin
2009-12-21 11:45                                   ` Alexander Graf
2009-12-21 12:02                                     ` Michael S. Tsirkin
2009-12-22 22:52                                       ` Jamie Lokier
2009-12-21 12:05                                     ` Avi Kivity
2009-12-21 13:45                                       ` David S. Ahern
2009-12-21 13:51                                         ` Michael S. Tsirkin
2009-12-21 14:07                                           ` David S. Ahern
2009-12-21 16:11                                         ` Avi Kivity
2009-12-21 12:04                               ` Avi Kivity
2009-12-21 12:04                                 ` Michael S. Tsirkin
2009-12-21 12:09                                   ` Avi Kivity
2009-12-21 12:17                                     ` Michael S. Tsirkin
2009-12-21 11:38                             ` Yaniv Kaul
2009-12-21 13:31                               ` [Qemu-devel] " Paolo Bonzini
2009-12-22 22:56                                 ` Jamie Lokier
2009-12-16 14:23           ` Andre Przywara [this message]

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=4B28ED52.40605@amd.com \
    --to=andre.przywara@amd.com \
    --cc=anthony@codemonkey.ws \
    --cc=avi@redhat.com \
    --cc=gleb@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.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;
as well as URLs for NNTP newsgroup(s).