qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] CPU vendor in KVM


From: Jan Kiszka
Subject: Re: [Qemu-devel] CPU vendor in KVM
Date: Sat, 04 May 2013 11:01:59 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666

On 2013-05-04 10:52, 李春奇 <Arthur Chunqi Li> wrote:
> On Sat, May 4, 2013 at 4:47 PM, Jan Kiszka <address@hidden> wrote:
>> Please don't top-post.
>>
>> On 2013-05-04 10:45, 李春奇 <Arthur Chunqi Li> wrote:
>>> But will the difference between the vendor ID and family number cause
>>> confusion to the OS in VM?
>>
>> The confusion is not yet clear to me. About which "-cpu ..." were you
>> talking?
>>
>> Jan
>>
>>>
>>> On Sat, May 4, 2013 at 4:05 PM, Jan Kiszka <address@hidden> wrote:
>>>> On 2013-05-04 09:50, 李春奇 <Arthur Chunqi Li> wrote:
>>>>> Hi Jan and All,
>>>>> I find that when enable KVM with qemu, vendor ID of simulated CPU will be
>>>>> set the same as host, but other features such as level, family, model,
>>>>> stepping are not changed. This may bring out a confusing result, the
>>>>> simulated CPU has a vendor name of "GenuineIntel" but with family number
>>>>> "16".
>>>>>
>>>>> I disabled the related code in function cpu_x86_find_by_name:
>>>>> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
>>>>> index e2302d8..df0e82e 100644
>>>>> --- a/target-i386/cpu.c
>>>>> +++ b/target-i386/cpu.c
>>>>> @@ -1295,7 +1295,8 @@ static int cpu_x86_find_by_name(x86_def_t
>>>>> *x86_cpu_def, const char *name)
>>>>>               * KVM's sysenter/syscall emulation in compatibility mode and
>>>>>               * when doing cross vendor migration
>>>>>               */
>>>>> -            if (kvm_enabled()) {
>>>>> +            //if (kvm_enabled()) {
>>>>> +            if (0) {
>>>>>                  uint32_t  ebx = 0, ecx = 0, edx = 0;
>>>>>                  host_cpuid(0, 0, NULL, &ebx, &ecx, &edx);
>>>>>                  x86_cpu_vendor_words2str(x86_cpu_def->vendor, ebx, edx,
>>>>> ecx);
>>>>>
>>>>> And the information of CPU remains consistent and the VM runs OK, even
>>>>> though with nested environment.
>>>>>
>>>>> Why should qemu set simulated cpu's vendor same as the host in KVM
>>>>> environment?
>>>>
>>>> The reason (and a way out) is given in the comment above the cited code.
>>>>
>>>> Jan
>>>>
>>>>
>>>
>>>
>>>
>>
>>
> 
> I use -cpu Opteron_G1, and got the following message in VM:
> address@hidden:~# cat /proc/cpuinfo
> processor : 0
> vendor_id : GenuineIntel
> cpu family : 15
> model : 6
> model name : AMD Opteron 240 (Gen 1 Class Opteron)
> stepping : 1
> microcode : 0x1
> cpu MHz : 2393.998
> cache size : 4096 KB
> fpu : yes
> fpu_exception : yes
> cpuid level : 5
> wp : yes
> flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
> pse36 clflush mmx fxsr sse sse2 syscall nx lm constant_tsc nopl pni
> hypervisor
> bogomips : 4787.99
> clflush size : 64
> cache_alignment : 128
> address sizes : 40 bits physical, 48 bits virtual
> power management:
> 
> The vendor_id is not consistent to the following messages.

The reason is what the comment says: Avoid that the guest picks a
suboptimal syscall mechanism that may have to be emulated by KVM all the
time. Obviously, this causes no problems with common guests as it is
done like this since day #1.

Jan


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]