On Fri, Oct 02, 2020 at 11:31:32AM -0400, Masayoshi Mizuma wrote:
Hello Jan, and Michal,
commit: 88957116c9 ("qemu: Use memory-backend-* for regular guest memory")
gets
the system memory sharable without numa config.
The qemu options with the patch will be like as:
-machine
pc-q35-5.2,accel=kvm,usb=off,vmport=off,smm=on,dump-guest-core=off,memory-backend=pc.ram
\
-object
memory-backend-file,id=pc.ram,mem-path=/var/lib/libvirt/qemu/ram/2-Test/pc.ram,share=yes,size=17179869184
\
So, we can remove the numa restriction of virtiofs, right?
The patch to remove that is the bottom of this email.
And, 88957116c9 seems to introduce another restriction which we
cannot create numa nodes on the machine. I got the following
message when I set the numa config and started the VM:
2020-10-02T00:31:46.780374Z qemu-system-x86_64: '-machine memory-backend' and
'-numa memdev' properties are mutually exclusive
It seems that this isn't a restriction for virtiofs. It's a bug introduced
by commit: 88957116c9. <numa> element doesn't work regardless of virtiofs
config...
- Masa
qemu rejects the -machine memory-backend' and '-numa memdev' because it
may cause crash. commit: ea81f98bce ("numa: prevent usage of -M memory-backend
and -numa memdev at the same time") introduced the check.
Do you have any ideas to solve above?
===================================================================
From: Masayoshi Mizuma <m.mizuma(a)jp.fujitsu.com>
Date: Fri, 2 Oct 2020 10:50:06 -0400
Subject: [PATCH] qemu: Remove the number of numa restriction for virtiofs
virtiofs requires at least one numa node to access the system
memory as shared memory.
88957116c9 ("qemu: Use memory-backend-* for regular guest memory")
gets the system memory sharable without the numa config.
Let's remove the number of numa restriction for virtiofs.
Signed-off-by: Masayoshi Mizuma <m.mizuma(a)jp.fujitsu.com>
---
src/qemu/qemu_validate.c | 44 ++++++++++++++++++++--------------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index a212605579..b5372e7499 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -3475,36 +3475,36 @@ qemuValidateDomainDefVirtioFSSharedMemory(const virDomainDef
*def)
size_t numa_nodes = virDomainNumaGetNodeCount(def->numa);
size_t i;
- if (numa_nodes == 0) {
+ if ((!numa_nodes) && (def->mem.access !=
VIR_DOMAIN_MEMORY_ACCESS_SHARED)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("virtiofs requires one or more NUMA nodes"));
+ _("virtiofs requires shared memory"));
return -1;
- }
-
- for (i = 0; i < numa_nodes; i++) {
- virDomainMemoryAccess node_access =
- virDomainNumaGetNodeMemoryAccessMode(def->numa, i);
+ } else {
+ for (i = 0; i < numa_nodes; i++) {
+ virDomainMemoryAccess node_access =
+ virDomainNumaGetNodeMemoryAccessMode(def->numa, i);
- switch (node_access) {
- case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT:
- if (def->mem.access != VIR_DOMAIN_MEMORY_ACCESS_SHARED) {
+ switch (node_access) {
+ case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT:
+ if (def->mem.access != VIR_DOMAIN_MEMORY_ACCESS_SHARED) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("virtiofs requires shared memory"));
+ return -1;
+ }
+ break;
+ case VIR_DOMAIN_MEMORY_ACCESS_SHARED:
+ break;
+ case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("virtiofs requires shared memory"));
return -1;
- }
- break;
- case VIR_DOMAIN_MEMORY_ACCESS_SHARED:
- break;
- case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE:
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("virtiofs requires shared memory"));
- return -1;
- case VIR_DOMAIN_MEMORY_ACCESS_LAST:
- default:
- virReportEnumRangeError(virDomainMemoryAccess, node_access);
- return -1;
+ case VIR_DOMAIN_MEMORY_ACCESS_LAST:
+ default:
+ virReportEnumRangeError(virDomainMemoryAccess, node_access);
+ return -1;
+ }
}
}
return 0;
--
2.27.0
Thanks,
Masa