On 05/28/2013 07:32 PM, Guannan Ren wrote:
>> if (def->cpu->sockets &&
>> - def->maxvcpus >
>> + def->maxvcpus !=
>> def->cpu->sockets * def->cpu->cores *
def->cpu->threads) {
>> virReportError(VIR_ERR_XML_DETAIL, "%s",
>> - _("Maximum CPUs greater than topology
>> limit"));
>> + _("Topology limit does not match maximum
>> CPUs"));
> Is this going to reject XML that was previously accepted? Is there a
> bugzilla showing what happens if this patch is not incorporated? I'm
> worried about introducing an unintentional regression if we include this
> in 1.0.6 without more justification.
>
Yes, it make the cpu topology limit setting more strict.
I'm okay with making things more strict, if it makes sense. But isn't
it feasible to support a topology that has more slots than the maximum?
That is, since a bare metal machine can have two sockets but only
populate one, why can't a virtual machine have 2 sockets but set a max
vcpu of 1 so that only one socket can be populated? Does qemu itself
enforce that there be a match?
That's why I'm worried about enforcing that the user can't have a
mismatch between maxvcpus vs. topology, if they specify both. I'm also
worried that this check might fire if the user specifies only topology
or only maxvcpus; I want to make sure that we only do the sanity
checking if both numbers are provided.
Alternatively, we can add more comments for <topology> to make
it clear
that
<vcpu> decide the number of vcpus, the sockets*cores*threads had better
be equal to vcpu numbers.
If there is a problem with a mismatch, then we should document that a
match is required, and fail on mismatch. Merely documenting that a
match is required without enforcing it is too weak; and enforcing it
without documentation is a disservice. I haven't ruled out enforcing a
match, but want to make sure that we aren't artificially crippling
something that might prove useful in reality, when compared with what
bare-metal setups can provide.
The
bz:https://bugzilla.redhat.com/show_bug.cgi?id=880017
Description of problem:
libvirt should check if vcpu topology is right. If the wrong vcpu
topology is given in xml , the wrong arguments also be passed to qemu-kvm.
vcpu number = sockets*cores*threads
Steps to Reproduce:
1.# virsh start vm
Domain vm started
2.# virsh dumpxml vm
<domain type='kvm' id='104'>
.......
<vcpu placement='static'>4</vcpu>
......
<cpu>
<topology sockets='1' cores='4' threads='2'/>
</cpu>
3.# ps -ef|grep qemu-kvm
qemu 21296 1 14 16:41 ? 00:00:17 /usr/libexec/qemu-kvm
-name vm -S -M rhel6.4.0 -enable-kvm -m 1024 -smp
4,sockets=1,cores=4,threads=2
......
Actual results:
Wrong vcpu topology can be given in xml and passed to qemu-kvm
Expected results:
libvirt should check if vcpu topology is right.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org