[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/4] libxc: report how much memory a domain has on each NUMA node
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) +{ + DECLARE_DOMCTL; + DECLARE_HYPERCALL_BOUNCE(memkbs, sizeof(uint64_t) * (*max_nodes), + XC_HYPERCALL_BUFFER_BOUNCE_OUT); + int ret = 0; + + 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; + + 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 |