On 03/30/2012 11:56 PM, Eric Blake wrote:
If we round up a user's memory request, we should update the XML
to reflect the actual value in use by the VM, rather than giving
an artificially small value back to the user.
* src/qemu/qemu_command.c (qemuBuildNumaArgStr)
(qemuBuildCommandLine): Reflect rounding back to XML.
---
src/qemu/qemu_command.c | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 3d2bb6b..8f6471b 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -3916,8 +3916,9 @@ qemuBuildNumaArgStr(const virDomainDefPtr def, virCommandPtr cmd)
virBufferAsprintf(&buf, "node,nodeid=%d",
def->cpu->cells[i].cellid);
virBufferAddLit(&buf, ",cpus=");
qemuBuildNumaCPUArgStr(def->cpu->cells[i].cpumask,&buf);
- virBufferAsprintf(&buf, "mem=%d",
- VIR_DIV_UP(def->cpu->cells[i].mem, 1024));
+ def->cpu->cells[i].mem = VIR_DIV_UP(def->cpu->cells[i].mem,
+ 1024) * 1024;
+ virBufferAsprintf(&buf, "mem=%d", def->cpu->cells[i].mem /
1024);
if (virBufferError(&buf))
goto error;
@@ -4061,10 +4062,12 @@ qemuBuildCommandLine(virConnectPtr conn,
/* Set '-m MB' based on maxmem, because the lower 'memory' limit
* is set post-startup using the balloon driver. If balloon driver
- * is not supported, then they're out of luck anyway
+ * is not supported, then they're out of luck anyway. Update the
+ * XML to reflect our rounding.
*/
virCommandAddArg(cmd, "-m");
- virCommandAddArgFormat(cmd, "%llu", VIR_DIV_UP(def->mem.max_balloon,
1024));
+ def->mem.max_balloon = VIR_DIV_UP(def->mem.max_balloon, 1024) * 1024;
+ virCommandAddArgFormat(cmd, "%llu", def->mem.max_balloon / 1024);
if (def->mem.hugepage_backed) {
if (!driver->hugetlbfs_mount) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,
It makes sense to reflect the real memory used in qemu command
line back to domain conf, but IMHO we need the documentations to
declare that the these memory stuffs mighted be rounded up,
otherwise I guess bugs will come by confused users.
Osier