[libvirt] [PATCH 2/4] libxl: implement per NUMA node free memory reporting
Jim Fehlig
jfehlig at suse.com
Mon Jul 1 23:27:17 UTC 2013
On 06/28/2013 08:32 AM, Dario Faggioli wrote:
> By providing the implementation of nodeGetCellsFreeMemory for
> the driver. This is all just a matter of properly formatting, in
> a way that libvirt like, what Xen provides via libxl_get_numainfo().
>
> [raistlin at Zhaman ~]$ sudo virsh --connect xen:/// freecell --all
> 0: 25004 KiB
> 1: 105848 KiB
> --------------------
> Total: 130852 KiB
Yeah, rather straight forward patch, which looks good on my non-NUMA machine as well
# virsh freecell --all
0: 7287216 KiB
--------------------
Total: 7287216 KiB
# virsh freecell --cellno 0
0: 7287216 KiB
ACK and pushed.
Regards,
Jim
>
> Signed-off-by: Dario Faggioli <dario.faggioli at citrix.com>
> ---
> src/libxl/libxl_driver.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 46 insertions(+)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 9f52394..a3a9171 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -4098,6 +4098,51 @@ libxlNodeGetFreeMemory(virConnectPtr conn)
> }
>
> static int
> +libxlNodeGetCellsFreeMemory(virConnectPtr conn,
> + unsigned long long *freeMems,
> + int startCell,
> + int maxCells)
> +{
> + int n, lastCell, numCells;
> + int ret = -1, nr_nodes = 0;
> + libxl_numainfo *numa_info = NULL;
> + libxlDriverPrivatePtr driver = conn->privateData;
> +
> + if (virNodeGetCellsFreeMemoryEnsureACL(conn) < 0)
> + return -1;
> +
> + /* Early failure is probably worth just a warning */
> + numa_info = libxl_get_numainfo(driver->ctx, &nr_nodes);
> + if (numa_info == NULL || nr_nodes == 0) {
> + VIR_WARN("libxl_get_numainfo failed to retrieve NUMA data");
> + return 0;
> + }
> +
> + /* Check/sanitize the cell range */
> + if (startCell > nr_nodes) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("start cell %d out of range (0-%d)"),
> + startCell, nr_nodes);
> + goto cleanup;
> + }
> + lastCell = startCell + maxCells - 1;
> + if (lastCell > nr_nodes)
> + lastCell = nr_nodes;
> +
> + for (numCells = 0, n = startCell; n <= lastCell; n++) {
> + if (numa_info[n].size == LIBXL_NUMAINFO_INVALID_ENTRY)
> + freeMems[numCells++] = 0;
> + else
> + freeMems[numCells++] = numa_info[n].free;
> + }
> + ret = numCells;
> +
> +cleanup:
> + libxl_numainfo_list_free(numa_info, nr_nodes);
> + return ret;
> +}
> +
> +static int
> libxlConnectDomainEventRegister(virConnectPtr conn,
> virConnectDomainEventCallback callback, void *opaque,
> virFreeCallback freecb)
> @@ -4683,6 +4728,7 @@ static virDriver libxlDriver = {
> .domainSetSchedulerParameters = libxlDomainSetSchedulerParameters, /* 0.9.0 */
> .domainSetSchedulerParametersFlags = libxlDomainSetSchedulerParametersFlags, /* 0.9.2 */
> .nodeGetFreeMemory = libxlNodeGetFreeMemory, /* 0.9.0 */
> + .nodeGetCellsFreeMemory = libxlNodeGetCellsFreeMemory, /* 1.1.1 */
> .connectDomainEventRegister = libxlConnectDomainEventRegister, /* 0.9.0 */
> .connectDomainEventDeregister = libxlConnectDomainEventDeregister, /* 0.9.0 */
> .domainManagedSave = libxlDomainManagedSave, /* 0.9.2 */
>
>
>
>
>
>
More information about the libvir-list
mailing list