|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/4] libxc: report how much memory a domain has on each NUMA node
On 05/03/14 14:36, Dario Faggioli wrote:
> by means of a new interface: xc_domain_numainfo().
>
> The caller is expected to allocate an array for the call to fill,
> with the results of the XEN_DOMCTL_numainfo hypercall. The size of
> the array is also passed to the function, which then returns back
> the number of elements that have actually been filled by Xen.
>
> Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
> ---
> tools/libxc/xc_domain.c | 28 ++++++++++++++++++++++++++++
> tools/libxc/xenctrl.h | 18 ++++++++++++++++++
> 2 files changed, 46 insertions(+)
>
> diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
> index 369c3f3..a2b3c07 100644
> --- a/tools/libxc/xc_domain.c
> +++ b/tools/libxc/xc_domain.c
> @@ -362,6 +362,34 @@ int xc_domain_getinfo(xc_interface *xch,
> return nr_doms;
> }
>
> +int xc_domain_numainfo(xc_interface *xch, uint32_t domid,
> + int *max_nodes, uint64_t *memkbs)
max_nodes is an unsigned quantity. libxc is quite fast and loose with
this, but lets not propage wrongness.
> +{
> + DECLARE_DOMCTL;
> + DECLARE_HYPERCALL_BOUNCE(memkbs, sizeof(uint64_t) * (*max_nodes),
> + XC_HYPERCALL_BUFFER_BOUNCE_OUT);
> + int ret = 0;
Don't need the initialiser.
> +
> + if ( xc_hypercall_bounce_pre(xch, memkbs) )
> + {
> + PERROR("Could not allocate bounce buffer for
> DOMCTL_domain_numainfo");
> + return -1;
> + }
> +
> + domctl.cmd = XEN_DOMCTL_numainfo;
> + domctl.domain = (domid_t)domid;
> + domctl.u.numainfo.max_node_index = *max_nodes - 1;
> + set_xen_guest_handle(domctl.u.numainfo.memkb_on_node, memkbs);
> +
> + ret = do_domctl(xch, &domctl);
> +
> + *max_nodes = domctl.u.numainfo.max_node_index + 1;
If the domctl fails, this should not be written back to *max_nodes.
~Andrew
> +
> + xc_hypercall_bounce_post(xch, memkbs);
> +
> + return ret;
> +}
> +
> int xc_domain_getinfolist(xc_interface *xch,
> uint32_t first_domain,
> unsigned int max_domains,
> diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
> index 13f816b..845d183 100644
> --- a/tools/libxc/xenctrl.h
> +++ b/tools/libxc/xenctrl.h
> @@ -657,6 +657,24 @@ int xc_domain_getinfolist(xc_interface *xch,
> xc_domaininfo_t *info);
>
> /**
> + * This function tells how much memory a domain has allocated on each
> + * online NUMA node of the host. The information is stored in an array
> + * that the caller provides, along with its size. The function updates
> + * the latter parameter with the number of elements in the array that
> + * have been actually filled.
> + *
> + * @param xch a handle to an open hypervisor interface
> + * @param domid the domain id for which we want the information
> + * @param max_nodes as an input, the size of the memkbs array; as an
> + * output, the number of filled elements in it
> + * @param memkbs an array with, in the i-eth element, the memory, in
> + * Kb, allocated for the domain on the i-eth NUMA node
> + * @return 0 on success, -1 on failure
> + */
> +int xc_domain_numainfo(xc_interface *xch, uint32_t domid,
> + int *max_nodes, uint64_t *memkbs);
> +
> +/**
> * This function set p2m for broken page
> * &parm xch a handle to an open hypervisor interface
> * @parm domid the domain id which broken page belong to
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |