[libvirt] [PATCH 1/4] libxl: implement NUMA capabilities reporting
Dario Faggioli
dario.faggioli at citrix.com
Thu Jul 4 15:49:25 UTC 2013
On lun, 2013-07-01 at 16:47 -0600, Jim Fehlig wrote:
> On 06/28/2013 08:32 AM, Dario Faggioli wrote:
> > Starting from Xen 4.2, libxl has all the bits and pieces are in
>
> s/are in/in/
>
Uups! Will fix, thanks.
> > diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
> > index e170357..2a9bcf0 100644
> >
> > static virCapsPtr
> > libxlMakeCapabilitiesInternal(virArch hostarch,
> > libxl_physinfo *phy_info,
> > + libxl_numainfo *numa_info, int nr_nodes,
> > + libxl_cputopology *cpu_topo, int nr_cpus,
>
> The most prominent pattern in libvirt is one param per line after the first, if
> they all don't fit in 80 columns. E.g.
>
> libxlMakeCapabilitiesInternal(virArch hostarch,
> libxl_physinfo *phy_info,
> libxl_numainfo *numa_info,
> int nr_nodes,
> libxl_cputopology *cpu_topo,
> int nr_cpus,
> ...)
>
Ok.
>
> > char *capabilities)
> > {
> > char *str, *token;
> > @@ -173,6 +175,12 @@ libxlMakeCapabilitiesInternal(virArch hostarch,
> > int host_pae = 0;
> > struct guest_arch guest_archs[32];
> > int nr_guest_archs = 0;
> > +
> > + /* For building NUMA capabilities */
> > + virCapsHostNUMACellCPUPtr *cpus = NULL;
> > + int *nr_cpus_node = NULL;
> > + bool numa_failed = false;
> > +
>
> No need for the extra whitespace between these local variables.
>
Killed.
> > virCapsPtr caps = NULL;
> >
> > memset(guest_archs, 0, sizeof(guest_archs));
> > @@ -280,6 +288,100 @@ libxlMakeCapabilitiesInternal(virArch hostarch,
> > nr_guest_archs)) == NULL)
> > goto no_memory;
> >
> > + /* What about NUMA? */
>
> What about it? I think the comment should just say "Include NUMA information if
> available" or similar :).
>
Agreed.
> > + if (!numa_info || !cpu_topo)
> > + return caps;
> > +
> > + if (VIR_ALLOC_N(cpus, nr_nodes))
> > + goto no_memory;
> > + memset(cpus, 0, sizeof(cpus) * nr_nodes);
>
> VIR_ALLOC_N will already zero-fill the memory. From its' documentation in
> viralloc.h
>
Right. I even looked it up (or so I remember), but then I wasn't sure it
was doing that. Anyway, thanks, I'll get rid of the explicit
zero-filling part.
> > + if (nr_cpus_node[node] == 1) {
> > + if (VIR_ALLOC(cpus[node]) < 0) {
> > + numa_failed = true;
> > + goto cleanup;
> > + }
> > + }
> > + else {
> > + if (VIR_REALLOC_N(cpus[node], nr_cpus_node[node]) < 0) {
>
> virReportOOMError() ?
>
Sounds reasonable. Will do.
> > +cleanup:
> > + if (numa_failed) {
> > + /* Looks like something went wrong. Well, that's bad, but probably
> > + * not enough to break the whole driver, so we log and carry on */
> > + for (i = 0; i < nr_nodes; i++) {
> > + VIR_FREE(cpus[i]);
> > + }
> > + VIR_WARN("Failed to retrieve and build host NUMA topology properly,\n"
> > + "disabling NUMA capabilities");
> > + virCapabilitiesFreeNUMAInfo(caps);
> > + }
> > +
> > + VIR_FREE(cpus);
> > + VIR_FREE(nr_cpus_node);
>
> Hmm, I'm beginning to think the numa additions to
> libxlMakeCapabilitiesInternal() should be in a helper function, e.g.
> libxlMakeNumaCapabilities(), and called when numa_info and cpu_topo are provided.
>
Yeah, it's a bit long, isn't it. I agree with the above and will make it
an helper for v2.
Thanks and Regards,
Dario
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130704/bf52f678/attachment-0001.sig>
More information about the libvir-list
mailing list