Re: KVM Processor cache size

Anthony Liguori
2010-08-02T22:25:03Z

On 08/02/2010 08:08 AM, Avi Kivity wrote:
> On 08/02/2010 03:51 PM, Andre Przywara wrote:
>> Ricardo Martins wrote:
>>> Hi guys,
>>>
>>> I'm having a problem with kvm, my physical machine have 2 processor
>>> Xeon E5520, with 8 mb cache size, when i run "cat /proc/cpuinfo" the
>>> linux shows 16 processors equal.
>>>
>>> processor : 15
>>> vendor_id : GenuineIntel
>>> cpu family : 6
>>> model : 26
>>> model name : Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
>>> stepping : 5
>>> cpu MHz : 1596.000
>>> cache size : 8192 KB
>> > ....
>>> The problem is that when I run the same command on the virtual
>>> machine, Linux shows the processors with only 32 kb, I believe that
>>> anything is wrong.
>>>
>>> processor : 0
>>> vendor_id : GenuineIntel
>>> cpu family : 6
>>> model : 6
>>> model name : QEMU Virtual CPU version 0.9.1
>>> stepping : 3
>>> cpu MHz : 2266.575
>>> cache size : 32 KB
>> > ....
>>> On virtual Machine:
>>> linea:/# x86info
>>> x86info v1.21. Dave Jones 2001-2007
>>>
>>>
>>> Found 1 CPU, but found 16d CPUs in MPTable.
>>> --------------------------------------------------------------------------
>>>
>>> Family: 6 Model: 6 Stepping: 3 Type: 0 Brand: 0
>>> CPU Model: Celeron / Mobile Pentium II Original OEM
>>> Feature flags:
>>> fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
>>> clflsh mmx fxsr sse sse2
>>> Extended feature flags:
>>> sse3 [31]
>>> [0] [2] [3] [4] [5] [6] [7] [8] [9] SYSCALL [13] [15] [16] xd [23]
>>> [24] em64t
>>> Cache info
>>> L1 Instruction cache: 32KB, 8-way associative. 64 byte line size.
>>> L1 Data cache: 32KB, 8-way associative. 64 byte line size.
>>> L2 unified cache: 2MB, sectored, 8-way associative. 64 byte line size.
>>> TLB info
>>
>> KVM (or better: the QEMU part) injects a bogus CPU model (compare
>> family/model/name), which is the same on all host CPUs. This helps
>> with migration, because the CPU does not change.
>> The cache size is also the same, as it is part of the "cpuid" command
>> output.
>> You can use other CPU models (like kvm64) for better base models, but
>> the cache size will likely not match your host processor's one.
>> For that purpose exists the "host" CPU model, which will (to some
>> degree) simply push your host CPU model to the guest. For now this
>> only affects the family/model/stepping/name values and the feature
>> flags.
>> I sent a patch to include the cache size when using -cpu host, but
>> this has been n'acked because the benefit is not clear.
>
> Anthony, why was this NACKed? First, there are programs which query
> the cache size. That's why it's exposed! Second, -cpu host is for
> exposing as many host cpu features as we can, not just those we have
> an immediate use for. It's like 'cp -a' dropping attributes the
> author didn't care about.

That's exactly what the code does today BTW. The kernel module filters
cpuid flags, qemu filters additional flags, and we don't pass everything
through anyway.

-cpu host is a mess and needs some love. It's impossible to use
correctly today in a production environment if you care about reliably
generating the same guest visible interface.

Regards,

Anthony Liguori