[libvirt] [PATCH 1/5] conf: add support for specifying CPU "dies" parameter
Daniel P. Berrangé
berrange at redhat.com
Wed Jan 8 14:45:38 UTC 2020
On Wed, Jan 08, 2020 at 03:34:34PM +0100, Jiri Denemark wrote:
> On Thu, Dec 19, 2019 at 12:42:04 +0000, Daniel P. Berrangé wrote:
> > Recently CPU hardware vendors have started to support a new level of
> > inside the CPU package topology known as a "die". Thus the hierarchy
>
> Level of what? Looks like a missing word between "level of" and
> "inside".
Really it was just saying 'a new level inside the CPU'.
> > @@ -1675,10 +1675,10 @@
> > <dd>The <code>topology</code> element specifies requested topology of
> > virtual CPU provided to the guest. Three non-zero values have to be
> > given for <code>sockets</code>, <code>cores</code>, and
> > - <code>threads</code>: total number of CPU sockets, number of cores per
> > - socket, and number of threads per core, respectively. Hypervisors may
> > - require that the maximum number of vCPUs specified by the
> > - <code>cpus</code> element equals to the number of vcpus resulting
> > + <code>threads</code>: total number of CPU sockets, dies per socket,
> > + number of cores per die, and number of threads per core, respectively.
> > + Hypervisors may require that the maximum number of vCPUs specified by
> > + the <code>cpus</code> element equals to the number of vcpus resulting
> > from the topology.</dd>
>
> This needs to be rewritten from scratch, I believe. The current version
> doesn't work because the first part talks about three attributes, while
> the rest documents four attributes. And just adding the dies attribute
> there wouldn't fix it as sockets, cores, and threads are required, but
> dies is optional.
Sigh, yes. Next time i'll actually read it.
> > <dt><code>feature</code></dt>
> ...
> > diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
> > index 7490d6bf73..c874c47354 100644
> > --- a/src/conf/cpu_conf.c
> > +++ b/src/conf/cpu_conf.c
> ...
> > @@ -535,6 +536,12 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
> > }
> > def->sockets = (unsigned int) ul;
> >
> > + if (virXPathULong("string(./topology[1]/@dies)", ctxt, &ul) < 0) {
> > + def->dies = 1;
> > + } else {
> > + def->dies = (unsigned int) ul;
> > + }
> > +
>
> I don't think you want to silently ignore dies='-5' or dies='foo' and
> use 1 instead. You should report an error if dies is specified, but it
> contains an incorrect value.
This is a bit of a long standing design flaw in our virXPathULong
usage in many places in fact.
>
> > if (virXPathULong("string(./topology[1]/@cores)", ctxt, &ul) < 0) {
> > virReportError(VIR_ERR_XML_ERROR, "%s",
> > _("Missing 'cores' attribute in CPU topology"));
> ...
>
> Jirka
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list