mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
qemu_command: Generate -mem-prealloc in one corner case more
When guest has NUMA nodes and QEMU is new enough to report default RAM ID then ideally we would use -numa memdev= combined with memory-backend-* combo becasue -mem-path/-mem-prealloc/-numa mem are deprecated. Well, there is one problem - the .memdev= attribute is machine type dependent (just look at arguments of virQEMUCapsGetMachineNumaMemSupported()) and to ensure backwards compatibility we prefer -numa mem= over -numa memdev=. But there was one corner case when -mem-prealloc was requested but not generated on the cmd line. It all starts with qemuBuildMemCommandLine() which generates just '-m XXX' and because it sees defaultRAMid and guest NUMA nodes greater than zero it does nothing more. Then, qemuBuildNumaCommandLine() sees that -numa mem= is still supported for given machine type and nothing else set @needBackend thus qemuBuildMemPathStr() is called which output -mem-prealloc only in a few cases assuming it was outputted earlier. Reported-by: Jing Qi <jinqi@redhat.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
3f390db2e2
commit
3010a69226
@ -7371,6 +7371,7 @@ qemuBuildMemPathStr(const virDomainDef *def,
|
||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(priv->driver);
|
||||
const long system_page_size = virGetSystemPageSizeKB();
|
||||
g_autofree char *mem_path = NULL;
|
||||
bool prealloc = false;
|
||||
|
||||
/* There are two cases where we want to put -mem-path onto
|
||||
* the command line: First one is when there are no guest
|
||||
@ -7384,19 +7385,22 @@ qemuBuildMemPathStr(const virDomainDef *def,
|
||||
return -1;
|
||||
if (qemuGetDomainHupageMemPath(priv->driver, def, pagesize, &mem_path) < 0)
|
||||
return -1;
|
||||
prealloc = true;
|
||||
} else if (def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_FILE) {
|
||||
if (qemuGetMemoryBackingPath(priv->driver, def, "ram", &mem_path) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (def->mem.allocation != VIR_DOMAIN_MEMORY_ALLOCATION_IMMEDIATE) {
|
||||
if (def->mem.allocation == VIR_DOMAIN_MEMORY_ALLOCATION_IMMEDIATE)
|
||||
prealloc = true;
|
||||
|
||||
if (prealloc && !priv->memPrealloc) {
|
||||
virCommandAddArgList(cmd, "-mem-prealloc", NULL);
|
||||
priv->memPrealloc = true;
|
||||
}
|
||||
|
||||
virCommandAddArgList(cmd, "-mem-path", mem_path, NULL);
|
||||
if (mem_path)
|
||||
virCommandAddArgList(cmd, "-mem-path", mem_path, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -7462,11 +7466,6 @@ qemuBuildMemCommandLine(virCommand *cmd,
|
||||
if (!virDomainNumaGetNodeCount(def->numa))
|
||||
qemuBuildMemCommandLineMemoryDefaultBackend(cmd, def, priv, defaultRAMid);
|
||||
} else {
|
||||
if (def->mem.allocation == VIR_DOMAIN_MEMORY_ALLOCATION_IMMEDIATE) {
|
||||
virCommandAddArgList(cmd, "-mem-prealloc", NULL);
|
||||
priv->memPrealloc = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add '-mem-path' (and '-mem-prealloc') parameter here if
|
||||
* the hugepages and no numa node is specified.
|
||||
|
@ -13,10 +13,9 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-instance-00000092/master-key.aes \
|
||||
-machine pc-i440fx-2.3,accel=kvm,usb=off,dump-guest-core=off \
|
||||
-m 14336 \
|
||||
-mem-prealloc \
|
||||
-realtime mlock=off \
|
||||
-smp 8,sockets=1,cores=8,threads=1 \
|
||||
-object memory-backend-file,id=ram-node0,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0,share=on,size=15032385536 \
|
||||
-object memory-backend-file,id=ram-node0,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0,share=on,prealloc=on,size=15032385536 \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \
|
||||
-display none \
|
||||
|
@ -13,12 +13,11 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-instance-00000092/master-key.aes \
|
||||
-machine pc-i440fx-2.3,accel=kvm,usb=off,dump-guest-core=off \
|
||||
-m 28672 \
|
||||
-mem-prealloc \
|
||||
-realtime mlock=off \
|
||||
-smp 20,sockets=1,cores=8,threads=1 \
|
||||
-object memory-backend-file,id=ram-node0,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0,share=off,size=15032385536 \
|
||||
-object memory-backend-file,id=ram-node0,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0,share=off,prealloc=on,size=15032385536 \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-object memory-backend-file,id=ram-node1,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node1,share=on,size=15032385536 \
|
||||
-object memory-backend-file,id=ram-node1,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node1,share=on,prealloc=on,size=15032385536 \
|
||||
-numa node,nodeid=1,cpus=8-15,memdev=ram-node1 \
|
||||
-uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \
|
||||
-display none \
|
||||
|
@ -13,14 +13,13 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-instance-00000092/master-key.aes \
|
||||
-machine pc-i440fx-2.3,accel=kvm,usb=off,dump-guest-core=off \
|
||||
-m 43008 \
|
||||
-mem-prealloc \
|
||||
-realtime mlock=off \
|
||||
-smp 32,sockets=1,cores=24,threads=1 \
|
||||
-object memory-backend-file,id=ram-node0,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0,share=on,size=15032385536 \
|
||||
-object memory-backend-file,id=ram-node0,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0,share=on,prealloc=on,size=15032385536 \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-object memory-backend-file,id=ram-node1,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node1,share=on,size=15032385536 \
|
||||
-object memory-backend-file,id=ram-node1,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node1,share=on,prealloc=on,size=15032385536 \
|
||||
-numa node,nodeid=1,cpus=2-3,memdev=ram-node1 \
|
||||
-object memory-backend-file,id=ram-node2,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node2,share=off,size=15032385536 \
|
||||
-object memory-backend-file,id=ram-node2,mem-path=/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node2,share=off,prealloc=on,size=15032385536 \
|
||||
-numa node,nodeid=2,cpus=4-5,memdev=ram-node2 \
|
||||
-uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \
|
||||
-display none \
|
||||
|
@ -15,6 +15,7 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-pc/.config \
|
||||
-m 1024 \
|
||||
-overcommit mem-lock=off \
|
||||
-smp 2,sockets=2,cores=1,threads=1 \
|
||||
-mem-prealloc \
|
||||
-numa node,nodeid=0,cpus=0-1,mem=1024 \
|
||||
-uuid bb508b28-d57b-44bd-9e9c-a134cef24b60 \
|
||||
-display none \
|
||||
|
Loading…
Reference in New Issue
Block a user