[libvirt] [PATCH 08/10] conf: Prepare making memory device target node optional

Peter Krempa pkrempa at redhat.com
Tue Nov 10 13:34:49 UTC 2015


On Tue, Oct 20, 2015 at 17:31:57 -0400, John Ferlan wrote:
> 
> 
> On 10/16/2015 08:11 AM, Peter Krempa wrote:
> > Adjust the config code so that it does not enforce that target memory
> > node is specified. To avoid breakage, adjust the qemu memory hotplug
> > config checker to disallow such config for now.
> > ---
> >  docs/formatdomain.html.in     |  5 +++--
> >  docs/schemas/domaincommon.rng |  8 +++++---
> >  src/conf/domain_conf.c        | 10 +++++++---
> >  src/qemu/qemu_domain.c        |  7 +++++++
> >  4 files changed, 22 insertions(+), 8 deletions(-)
> > 
> 
> It almost feels like patches 9 & 10 should precede this one. Perhaps
> easier with the html.in change. Consider this as a review for 8-10 as
> well as some other random thoughts.

They can't be inverted, since the later patches rely on the fact that
the node is now a signed variable. Undoing that would break the
separation. You'll have to live with it.

> 
> So if I'm reading things correctly, a PPC64 guest "can" supply NUMA
> guest nodes, but it doesn't have to. Is that a fair assumption? It

Well, I'd say that you can hotplug memory on PPC64 without needing NUMA
in any way.


> matters mostly to help describe things.  If it can have it, then perhaps
> another test (copy qemuxml2argv-memory-hotplug-ppc64-nonuma.xml to
> qemuxml2argv-memory-hotplug-ppc64.xml and add the numa node defs).

Yes that would work, but it would basically test the same code.

> 
> If PPC64 doesn't support NUMA guest nodes, then does it make sense in
> post processing code to set targetNode = -1 if ARCH_IS_PPC64? It

That statement is untrue. PPC64 does support guest NUMA nodes. It works
with the current code. This is a usability improvement.

> wouldn't be the first PPC64 specific code.  Along the same lines, would
> be ignoring targetNode in patch 9 if PPC64.  Furthermore, if PPC64
> doesn't support NUMA guest nodes, I would have expected a check during
> parse - I didn't look that hard for this case.  I was merely thinking
> what happens if PPC64 does define NUMA guest nodes and those can be used
> by the memory device.

Um, what?

> 
> > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> > index c88b032..279424d 100644
> > --- a/docs/formatdomain.html.in
> > +++ b/docs/formatdomain.html.in
> > @@ -6300,8 +6300,9 @@ qemu-kvm -net nic,model=? /dev/null
> >            added memory as a scaled integer.
> >          </p>
> >          <p>
> > -          The mandatory <code>node</code> subelement configures the guest NUMA
> > -          node to attach the memory to.
> > +          The <code>node</code> subelement configures the guest NUMA node to
> > +          attach the memory to. Note: Some hypervisors or specific
> > +          configurations may require that <code>node</code> is specified.
> 
> How about:
> 
> The optional <code>node</code> subelement provides the guest <a
> href="#elementsCPU">cpu NUMA node or cell id</a> to attach the memory.

In the first sentence this merely drops 'mandatory'. Rewording can be
saved for later.

> 
> <p> Note: The hypervisor may require the <code>node</code> to be
> specified for some architectures.</p>

If you enable NUMA for your guest, you have to specify the NUMA node for
the memory module, so your wording is insufficient.

I'll reword it though, but differently.

> 
> 
> FWIW: It almost feels like we need an example of what is meant - that is
> "For QEMU/KVM, the PowerPC64 pseries guests do not require that the
> <code>node</code> subelement is defined. If not defined, then the memory
> device will be attached to [???]."

... the only memory region the guest is using. Since it doesn't have
NUMA. It can be ommited if and only if NUMA is not enabled.

BTW there's a bug in the code in this regard. The slot wouldn't be
checked on PPC if NUMA was enabled.

> 
> BTW: The additional text only makes sense as of patch 10 and it wasn't
> clear if PPC64 "could" support numa guest nodes.

It obviously does.

> 
> 
> >          </p>
> >        </dd>
> >      </dl>
> > diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> > index f196177..994face 100644
> > --- a/docs/schemas/domaincommon.rng
> > +++ b/docs/schemas/domaincommon.rng
> > @@ -4532,9 +4532,11 @@
> >          <element name="size">
> >            <ref name="scaledInteger"/>
> >          </element>
> > -        <element name="node">
> > -          <ref name="unsignedInt"/>
> > -        </element>
> > +        <optional>
> > +          <element name="node">
> > +            <ref name="unsignedInt"/>
> > +          </element>
> > +        </optional>
> >        </interleave>
> >      </element>
> >    </define>
> > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> > index 514bd8a..a5ab29c 100644
> > --- a/src/conf/domain_conf.c
> > +++ b/src/conf/domain_conf.c
> > @@ -12520,11 +12520,15 @@ virDomainMemoryTargetDefParseXML(xmlNodePtr node,
> >      int ret = -1;
> >      xmlNodePtr save = ctxt->node;
> >      ctxt->node = node;
> > +    int rv;
> > 
> > -    if (virXPathInt("string(./node)", ctxt, &def->targetNode) < 0 ||
> > -        def->targetNode < 0) {
> > +    /* initialize to value which marks that the user didn't speify it */
> 
> specify
> 
> This feels like a need for something like the Tristate{Bool|State}
> structs...  Or way to force optional fields to something specific

Not really. Sacrificing the sign bit for this is sufficient here.

Peter

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20151110/5c5c3057/attachment-0001.sig>


More information about the libvir-list mailing list