Re: [libvirt] [PATCH V2 1/2] libxl: fix reporting of maximum memory

2017-02-09 Thread Joao Martins
On 02/08/2017 10:24 PM, Jim Fehlig wrote:
> The libxl driver reports different values of maximum memory depending
> on state of a domain. If inactive, maximum memory value is reported
> correctly. When active, maximum memory is derived from max_pages value
> returned by the XEN_SYSCTL_getdomaininfolist sysctl operation. But
> max_pages can be changed by toolstacks and does not necessarily
> represent the maximum memory a domain can use during its active
> lifetime.
> 
> A better location for determining a domain's maximum memory is the
> /local/domain//memory/static-max node in xenstore. This value
> is set from the libxl_domain_build_info.max_memkb field when creating
> the domain. Currently it cannot be changed nor can its value be
> exceeded by a balloon operation. From libvirt's perspective, always
> reporting maximum memory with virDomainDefGetMemoryTotal() will produce
> the same results as reading the static-max node in xenstore.
> 
> Signed-off-by: Jim Fehlig 

Acked-by: Joao Martins 

> ---
>  src/libxl/libxl_driver.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 38ad91e..040b986 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -1640,10 +1640,10 @@ libxlDomainGetInfo(virDomainPtr dom, virDomainInfoPtr 
> info)
>  if (virDomainGetInfoEnsureACL(dom->conn, vm->def) < 0)
>  goto cleanup;
>  
> +info->maxMem = virDomainDefGetMemoryTotal(vm->def);
>  if (!virDomainObjIsActive(vm)) {
>  info->cpuTime = 0;
>  info->memory = vm->def->mem.cur_balloon;
> -info->maxMem = virDomainDefGetMemoryTotal(vm->def);
>  } else {
>  libxl_dominfo_init(&d_info);
>  
> @@ -1655,7 +1655,6 @@ libxlDomainGetInfo(virDomainPtr dom, virDomainInfoPtr 
> info)
>  }
>  info->cpuTime = d_info.cpu_time;
>  info->memory = d_info.current_memkb;
> -info->maxMem = d_info.max_memkb;
>  
>  libxl_dominfo_dispose(&d_info);
>  }
> @@ -5174,7 +5173,7 @@ libxlDomainMemoryStats(virDomainPtr dom,
>  goto endjob;
>  }
>  mem = d_info.current_memkb;
> -maxmem = d_info.max_memkb;
> +maxmem = virDomainDefGetMemoryTotal(vm->def);
>  
>  LIBXL_SET_MEMSTAT(VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON, mem);
>  LIBXL_SET_MEMSTAT(VIR_DOMAIN_MEMORY_STAT_AVAILABLE, maxmem);
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH V2 1/2] libxl: fix reporting of maximum memory

2017-02-08 Thread Jim Fehlig
The libxl driver reports different values of maximum memory depending
on state of a domain. If inactive, maximum memory value is reported
correctly. When active, maximum memory is derived from max_pages value
returned by the XEN_SYSCTL_getdomaininfolist sysctl operation. But
max_pages can be changed by toolstacks and does not necessarily
represent the maximum memory a domain can use during its active
lifetime.

A better location for determining a domain's maximum memory is the
/local/domain//memory/static-max node in xenstore. This value
is set from the libxl_domain_build_info.max_memkb field when creating
the domain. Currently it cannot be changed nor can its value be
exceeded by a balloon operation. From libvirt's perspective, always
reporting maximum memory with virDomainDefGetMemoryTotal() will produce
the same results as reading the static-max node in xenstore.

Signed-off-by: Jim Fehlig 
---
 src/libxl/libxl_driver.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 38ad91e..040b986 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -1640,10 +1640,10 @@ libxlDomainGetInfo(virDomainPtr dom, virDomainInfoPtr 
info)
 if (virDomainGetInfoEnsureACL(dom->conn, vm->def) < 0)
 goto cleanup;
 
+info->maxMem = virDomainDefGetMemoryTotal(vm->def);
 if (!virDomainObjIsActive(vm)) {
 info->cpuTime = 0;
 info->memory = vm->def->mem.cur_balloon;
-info->maxMem = virDomainDefGetMemoryTotal(vm->def);
 } else {
 libxl_dominfo_init(&d_info);
 
@@ -1655,7 +1655,6 @@ libxlDomainGetInfo(virDomainPtr dom, virDomainInfoPtr 
info)
 }
 info->cpuTime = d_info.cpu_time;
 info->memory = d_info.current_memkb;
-info->maxMem = d_info.max_memkb;
 
 libxl_dominfo_dispose(&d_info);
 }
@@ -5174,7 +5173,7 @@ libxlDomainMemoryStats(virDomainPtr dom,
 goto endjob;
 }
 mem = d_info.current_memkb;
-maxmem = d_info.max_memkb;
+maxmem = virDomainDefGetMemoryTotal(vm->def);
 
 LIBXL_SET_MEMSTAT(VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON, mem);
 LIBXL_SET_MEMSTAT(VIR_DOMAIN_MEMORY_STAT_AVAILABLE, maxmem);
-- 
2.9.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list