All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dario Faggioli <dario.faggioli@citrix.com>
To: "boris.ostrovsky@oracle.com" <boris.ostrovsky@oracle.com>
Cc: Wei Liu <wei.liu2@citrix.com>,
	Ian Campbell <Ian.Campbell@citrix.com>,
	"port-xen@netbsd.org" <port-xen@netbsd.org>,
	Andrew Cooper <Andrew.Cooper3@citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"jbeulich@suse.com" <jbeulich@suse.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	"ufimtseva@gmail.com" <ufimtseva@gmail.com>,
	Ian Jackson <Ian.Jackson@citrix.com>,
	"Keir (Xen.org)" <keir@xen.org>
Subject: Re: [PATCH v3 7/7] libxl: Add interface for querying hypervisor about PCI topology
Date: Mon, 16 Feb 2015 13:45:15 +0000	[thread overview]
Message-ID: <1424094312.6968.17.camel@citrix.com> (raw)
In-Reply-To: <1423512275-6531-8-git-send-email-boris.ostrovsky@oracle.com>


[-- Attachment #1.1: Type: text/plain, Size: 5050 bytes --]

On Mon, 2015-02-09 at 15:04 -0500, Boris Ostrovsky wrote:
> .. and use this new interface to display it along with CPU topology
> and NUMA information when 'xl info -n' command is issued
> 
> The output will look like
> ...
> cpu_topology           :
> cpu:    core    socket     node
>   0:       0        0        0
> ...
> device topology        :
> device           node
> 0000:00:00.0      0
> 0000:00:01.0      0
> ...
> 
Cool, I like this! :-)

At some point, we may want to think about gathering most of/all NUMA
related information and create appropriate xl commands, but for now, I
think it is fine to have this info here.

> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -692,6 +692,14 @@ void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, libxl_mac *src);
>  #define LIBXL_HAVE_PSR_CMT 1
>  #endif
>  
> +/*
> + * LIBXL_HAVE_PCITOPO
> + *
> + * If this is defined, we have interfaces to query hypervisor about PCI device
> + * topology
> + */
> +#define  LIBXL_HAVE_PCITOPO 1
> +
>
This is probably not a big deal, but the majority of the definitions of
these macros have a wording like this: "FOO indicates that ...". E.g.:

/*
 * LIBXL_HAVE_VCPUINFO_SOFT_AFFINITY indicates that a 'cpumap_soft'
 * field (of libxl_bitmap type) is present in libxl_vcpuinfo,
 * containing the soft affinity of a vcpu.
 */
#define LIBXL_HAVE_VCPUINFO_SOFT_AFFINITY 1

and homogeneity and consistency has some value here, I think.

In any case, you have an extra space between #define and
LIBXL_HAVE_PCITOPO. :-)

> @@ -1070,6 +1078,12 @@ void libxl_vminfo_list_free(libxl_vminfo *list, int nb_vm);
>  libxl_cputopology *libxl_get_cpu_topology(libxl_ctx *ctx, int *nb_cpu_out);
>  void libxl_cputopology_list_free(libxl_cputopology *, int nb_cpu);
>  
> +#ifdef  LIBXL_HAVE_PCITOPO
> +#define LIBXL_PCITOPOLOGY_INVALID_ENTRY (~(uint32_t)0)
> +libxl_pcitopology *libxl_get_pci_topology(libxl_ctx *ctx, int *num_devs);
> +void libxl_pcitopology_list_free(libxl_pcitopology *, int num_devs);
> +#endif
> +
Is there the need to gate new APIs like this? I've never done that, and
I don't think there is. AFAIUI, these are (apart from a few exceptions
like LIBXL_HAVE_NO_SUSPEND_RESUME) intended for being used by libxl
consumers, not libxl own implementation.

> diff --git a/tools/libxl/libxl_freebsd.c b/tools/libxl/libxl_freebsd.c
> index e8b88b3..68d7b71 100644
> --- a/tools/libxl/libxl_freebsd.c
> +++ b/tools/libxl/libxl_freebsd.c
> @@ -131,3 +131,17 @@ libxl_device_model_version libxl__default_device_model(libxl__gc *gc)
>  {
>      return LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN;
>  }
> +
> +#ifdef  LIBXL_HAVE_PCITOPO
> +int libxl__pci_numdevs(libxl__gc *gc)
> +{
> +    return ERROR_NI;
> +}
> +
> +int libxl__pci_topology_init(libxl__gc *gc,
> +                             physdev_pci_device_t *devs,
> +                             int num_devs)
> +{
> +    return ERROR_NI;
> +}
> +#endif
>
And the same for internal functions, and elsewhere.
 
> @@ -5209,12 +5214,37 @@ static void output_topologyinfo(void)
>      printf("cpu:    core    socket     node\n");
>  
>      for (i = 0; i < nr; i++) {
> -        if (info[i].core != LIBXL_CPUTOPOLOGY_INVALID_ENTRY)
> +        if (cpuinfo[i].core != LIBXL_CPUTOPOLOGY_INVALID_ENTRY)
>              printf("%3d:    %4d     %4d     %4d\n", i,
> -                   info[i].core, info[i].socket, info[i].node);
> +                   cpuinfo[i].core, cpuinfo[i].socket, cpuinfo[i].node);
> +    }
> +
> +    libxl_cputopology_list_free(cpuinfo, nr);
> +
> +#ifdef  LIBXL_HAVE_PCITOPO
> +    pciinfo = libxl_get_pci_topology(ctx, &nr);
> +    if (cpuinfo == NULL) {
> +        fprintf(stderr, "libxl_get_pci_topology failed.\n");
> +        return;
>      }
>  
> -    libxl_cputopology_list_free(info, nr);
> +    printf("device topology        :\n");
> +    printf("device           node\n");
> +    for (i = 0; i < nr; i++) {
> +        if (pciinfo[i].node != LIBXL_PCITOPOLOGY_INVALID_ENTRY) {
> +            printf("%04x:%02x:%02x.%01x      %d\n", pciinfo[i].seg,
> +                   pciinfo[i].bus,
> +                   ((pciinfo[i].devfn >> 3) & 0x1f), (pciinfo[i].devfn & 7),
> +                   pciinfo[i].node);
> +            valid_devs++;
> +        }
> +    }
> +
> +    if (valid_devs == 0)
> +        printf("No device topology data available\n");
> +
> +    libxl_pcitopology_list_free(pciinfo, nr);
> +#endif
>
And for implementation too, I think.

In fact, if I'm not missing something obvious, since we're always
distributing xl and libxl together, this will always be "#ifdef 1",
wouldn't it?

Also, ISTR that the first change that actually changes the API should
bump the MAJOR in libxl's Makefile. I'm not sure this change qualifies
as such, as you're adding stuff, not altering existing data structs
(e.g., by adding fields, etc). Personally, I think it does, but I'm
leaving this to tools maintainers.

Regards,
Dario

[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  parent reply	other threads:[~2015-02-16 13:45 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-09 20:04 [PATCH v3 0/7] Display IO topology when PXM data is available (plus some cleanup) Boris Ostrovsky
2015-02-09 20:04 ` [PATCH v3 1/7] x86/numa: Make use of NUMA_NO_NODE consistent Boris Ostrovsky
2015-02-10 10:41   ` Andrew Cooper
2015-02-10 11:39   ` Jan Beulich
     [not found]   ` <54D9FBE7020000780005E91E@mail.emea.novell.com>
2015-02-10 14:55     ` Boris Ostrovsky
     [not found]   ` <54D9E076.1080604@citrix.com>
2015-02-16 13:57     ` Dario Faggioli
2015-02-09 20:04 ` [PATCH v3 2/7] pci: Do not ignore device's PXM information Boris Ostrovsky
2015-02-09 20:04 ` [PATCH v3 3/7] sysctl: Make topologyinfo and numainfo sysctls a little more efficient Boris Ostrovsky
2015-02-13 12:26   ` Wei Liu
     [not found]   ` <20150213122609.GU13644@zion.uk.xensource.com>
2015-02-13 14:21     ` Boris Ostrovsky
2015-02-16 14:08   ` Dario Faggioli
2015-02-16 15:55     ` Boris Ostrovsky
2015-02-23 16:40   ` Ian Campbell
     [not found]   ` <1424709653.27930.212.camel@citrix.com>
2015-02-23 16:48     ` Boris Ostrovsky
     [not found]     ` <54EB59F0.2070405@oracle.com>
2015-02-23 16:59       ` Jan Beulich
     [not found]       ` <54EB6A770200007800062BDD@mail.emea.novell.com>
2015-02-23 17:15         ` Ian Campbell
2015-02-09 20:04 ` [PATCH v3 4/7] sysctl: Add sysctl interface for querying PCI topology Boris Ostrovsky
2015-02-10 11:13   ` Andrew Cooper
2015-02-10 14:45     ` Boris Ostrovsky
     [not found]     ` <54DA19A4.8070603@oracle.com>
2015-02-10 14:54       ` Andrew Cooper
     [not found]       ` <54DA1BC1.2030205@citrix.com>
2015-02-10 15:06         ` Boris Ostrovsky
     [not found]         ` <54DA1E6D.2010401@oracle.com>
2015-02-10 16:30           ` Jan Beulich
     [not found]           ` <54DA322B02000078000C8167@mail.emea.novell.com>
2015-02-10 16:33             ` Andrew Cooper
2015-02-09 20:04 ` [PATCH v3 5/7] libxl/libxc: Move libxl_get_cpu_topology()'s hypercall buffer management to libxc Boris Ostrovsky
2015-02-10 11:23   ` Andrew Cooper
2015-02-10 14:48     ` Boris Ostrovsky
2015-02-16 14:22   ` Dario Faggioli
2015-02-23 16:44   ` Ian Campbell
     [not found]   ` <1424709863.27930.214.camel@citrix.com>
2015-02-23 16:52     ` Boris Ostrovsky
     [not found]     ` <54EB5AC9.7070409@oracle.com>
2015-02-23 17:14       ` Ian Campbell
2015-02-23 17:59         ` Boris Ostrovsky
2015-02-09 20:04 ` [PATCH v3 6/7] libxl/libxc: Move libxl_get_numainfo()'s " Boris Ostrovsky
2015-02-09 20:04 ` [PATCH v3 7/7] libxl: Add interface for querying hypervisor about PCI topology Boris Ostrovsky
2015-02-13 12:43   ` Wei Liu
     [not found]   ` <20150213124345.GV13644@zion.uk.xensource.com>
2015-02-13 14:22     ` Boris Ostrovsky
2015-02-16 13:45   ` Dario Faggioli [this message]
2015-02-16 15:54     ` Boris Ostrovsky
     [not found]     ` <54E212A3.7000802@oracle.com>
2015-02-16 16:06       ` Dario Faggioli
2015-02-16 16:47       ` Wei Liu
2015-02-23 16:52   ` Ian Campbell
2015-02-10  8:52 ` [PATCH v3 0/7] Display IO topology when PXM data is available (plus some cleanup) Jan Beulich
2015-02-10 11:08   ` Andrew Cooper
2015-02-10 10:26 ` [PATCH v3 4/7] sysctl: Add sysctl interface for querying PCI topology Robert Elz
     [not found] ` <1423512275-6531-3-git-send-email-boris.ostrovsky@oracle.com>
2015-02-10 10:45   ` [PATCH v3 2/7] pci: Do not ignore device's PXM information Andrew Cooper
2015-02-10 11:43   ` Jan Beulich
     [not found] ` <2508.1423564006@perseus.noi.kre.to>
2015-02-10 14:37   ` [PATCH v3 4/7] sysctl: Add sysctl interface for querying PCI topology Boris Ostrovsky
     [not found] ` <1423512275-6531-7-git-send-email-boris.ostrovsky@oracle.com>
2015-02-10 11:45   ` [PATCH v3 6/7] libxl/libxc: Move libxl_get_numainfo()'s hypercall buffer management to libxc Andrew Cooper
     [not found]   ` <54D9EF57.7050308@citrix.com>
2015-02-10 14:59     ` Boris Ostrovsky
2015-02-23 16:45   ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1424094312.6968.17.camel@citrix.com \
    --to=dario.faggioli@citrix.com \
    --cc=Andrew.Cooper3@citrix.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@citrix.com \
    --cc=Stefano.Stabellini@citrix.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=jbeulich@suse.com \
    --cc=keir@xen.org \
    --cc=port-xen@netbsd.org \
    --cc=ufimtseva@gmail.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.