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/<id>/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 <jfehlig@xxxxxxxx> Acked-by: Joao Martins <joao.m.martins@xxxxxxxxxx> > --- > 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@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list