Hi list,
I'm trying to debug a strange issue I have, and I'd appreciate some help.
I've upgraded libvirt to 1.2.2, on Scientific Linux, with
qemu-kvm-0.12.1.2-2.415.el6_5.3
Here’s my analysis so far:
I figured out that libvirt uses HMP to get the list of models from qemu-kvm by running
qemu-kvm -cpu ?model -nodefconfig. This returns the following:
x86 Opteron_G5 AMD Opteron 63xx class CPU
x86 Opteron_G4 AMD Opteron 62xx class CPU
x86 Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron)
x86 Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron)
x86 Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron)
x86 Haswell Intel Core Processor (Haswell)
x86 SandyBridge Intel Xeon E312xx (Sandy Bridge)
x86 Westmere Westmere E56xx/L56xx/X56xx (Nehalem-C)
x86 Nehalem Intel Core i7 9xx (Nehalem Class Core i7)
x86 Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2)
x86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2)
x86 cpu64-rhel5 QEMU Virtual CPU version (cpu64-rhel5)
x86 cpu64-rhel6 QEMU Virtual CPU version (cpu64-rhel6)
x86 n270 Intel(R) Atom(TM) CPU N270 @ 1.60GHz
x86 athlon QEMU Virtual CPU version 0.12.1
x86 pentium3
x86 pentium2
x86 pentium
x86 486
x86 coreduo Genuine Intel(R) CPU T2600 @ 2.16GHz
x86 qemu32 QEMU Virtual CPU version 0.12.1
x86 kvm64 Common KVM processor
x86 core2duo Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
x86 phenom AMD Phenom(tm) 9550 Quad-Core Processor
x86 qemu64 QEMU Virtual CPU version 0.12.1
The comment describing the function parsing this list states that the output is expected
to be as follows:
/* Format:
* <arch> <model>
* qemu-0.13 encloses some model names in []:
* <arch> [<model>]
*/
static int
virQEMUCapsParseX86Models(const char *output,
virQEMUCapsPtr qemuCaps)
{
but this function doesn’t strip the rest of the line, so the models array becomes:
Breakpoint 1, x86Decode (cpu=0x7fffd82a8460, data=0x7fffd8272d00, models=0x7fffd82b7440,
nmodels=25, preferred=0x7fffd82a81f0 "Nehalem", flags=0) at cpu/cpu_x86.c:1487
1487 {
(gdb) p models
$1 = (const char **) 0x7fffd82b7440
(gdb) p *models
$2 = 0x7fffd82ba240 "Opteron_G5 AMD Opteron 63xx class CPU", ' '
<repeats 22 times>
(gdb) p *models@25
$3 = {0x7fffd82ba240 "Opteron_G5 AMD Opteron 63xx class CPU", ' '
<repeats 22 times>, 0x7fffd82c8c30 "Opteron_G4 AMD Opteron 62xx class
CPU", ' ' <repeats 22 times>,
0x7fffd8169e00 "Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron) ",
0x7fffd8169cb0 "Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron) ",
0x7fffd8169b60 "Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron)", '
' <repeats 11 times>, 0x7fffd8169a10 "Haswell Intel Core Processor
(Haswell)", ' ' <repeats 18 times>,
0x7fffd81697e0 "SandyBridge Intel Xeon E312xx (Sandy Bridge)", ' '
<repeats 16 times>, 0x7fffd8169690 "Westmere Westmere E56xx/L56xx/X56xx
(Nehalem-C) ",
0x7fffd8169460 "Nehalem Intel Core i7 9xx (Nehalem Class Core i7) ",
0x7fffd81693f0 "Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2) ",
0x7fffd8169310 "Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2) ",
0x7fffd8169230 "cpu64-rhel5 QEMU Virtual CPU version (cpu64-rhel5)
", 0x7fffd8169150 "cpu64-rhel6 QEMU Virtual CPU version (cpu64-rhel6)
", 0x7fffd82ba2b0 "n270 Intel(R) Atom(TM) CPU N270 @ 1.60GHz ",
0x7fffd81690e0 "athlon QEMU Virtual CPU version 0.12.1", ' '
<repeats 17 times>, 0x7fffd8169000 "pentium3", ' ' <repeats 50
times>, 0x7fffd8168f90 "pentium2", ' ' <repeats 50 times>,
0x7fffd8168eb0 "pentium", ' ' <repeats 50 times>,
0x7fffd82a8760 "486", ' ' <repeats 50 times>, 0x7fffd8168e40
"coreduo Genuine Intel(R) CPU", ' ' <repeats 11 times>,
"T2600 @ 2.16GHz ", 0x7fffd8168d60 "qemu32 QEMU Virtual CPU version
0.12.1", ' ' <repeats 17 times>,
0x7fffd82bb150 "kvm64 Common KVM processor", ' ' <repeats 28
times>, 0x7fffd8168cf0 "core2duo Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
", 0x7fffd8168c10 "phenom AMD Phenom(tm) 9550 Quad-Core Processor
",
0x7fffd8168b30 "qemu64 QEMU Virtual CPU version 0.12.1", ' '
<repeats 17 times>}
cpuModellsAllowed then does a strcmp between “Nehalem” and "Nehalem Intel Core i7
9xx (Nehalem Class Core i7)” which fails, and the vm fails to start with:
2014-03-10 14:56:16.917+0000: 8328: info : qemuDomainDefineXML:6231 : Creating domain
'530df8bd-7b64-4553-b4f4-18922e1327bf'
2014-03-10 14:56:17.114+0000: 8329: warning : x86Decode:1515 : Preferred CPU model Nehalem
not allowed by hypervisor; closest supported model will be used
2014-03-10 14:56:17.114+0000: 8329: error : x86Decode:1571 : internal error: Cannot find
suitable CPU model for given data
Kind regards,
Ruben Kerkhof