mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
libxl: fix reporting of maximum memory
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@suse.com>
This commit is contained in:
parent
bd1168101a
commit
d2b77608e9
@ -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);
|
||||
}
|
||||
@ -5175,7 +5174,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);
|
||||
|
Loading…
Reference in New Issue
Block a user