On 05/29/2013 04:20 AM, Eric Blake wrote:
On 05/28/2013 03:59 AM, Guannan Ren wrote:
> For qemu, if the -smp N or the value of maxcpus is given, it define
> the number of vcpu of guest whenever the vcpu topology is defined or
> not. But if the -smp N and maxcpus are missing, the topology can
> compute and define vcpus for guest automatically by math:
>
> vcpu number = sockets*cores*threads
>
> For libvirt, as <vcpu> is always mandatory, so we can ask topology
> to match maximum vcpu numbers.
> ---
> src/conf/domain_conf.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index a9656af..ffdc6da 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -11815,10 +11815,10 @@ virDomainDefParseXML(xmlDocPtr xml,
> goto error;
>
> 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.
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.
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.