* Returns: 0 on success, -1 on error
*/
int
-qemuDomainDefNumaCPUsRectify(virDomainDef *def, virQEMUCaps *qemuCaps)
+qemuDomainDefNumaCPUsRectify(virDomainDef *def,
+ virQEMUCaps *qemuCaps G_GNUC_UNUSED)
{
unsigned int vcpusMax, numacpus;
- /* QEMU_CAPS_NUMA tells us if QEMU is able to handle disjointed
- * NUMA CPU ranges. The filling process will create a disjointed
- * setup in node0 most of the time. Do not proceed if QEMU
- * can't handle it.*/
- if (virDomainNumaGetNodeCount(def->numa) == 0 ||
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA))
+ if (virDomainNumaGetNodeCount(def->numa) == 0)
return 0;
vcpusMax = virDomainDefGetVcpusMax(def);
qemuValidateDomainDefNuma(const virDomainDef *def,
virQEMUCaps *qemuCaps)
{
- size_t ncells = virDomainNumaGetNodeCount(def->numa);
- size_t i;
-
- for (i = 0; i < ncells; i++) {
- virBitmap *cpumask = virDomainNumaGetNodeCpumask(def->numa, i);
-
- if (cpumask) {
- g_autofree char * cpumaskStr = NULL;
- if (!(cpumaskStr = virBitmapFormat(cpumask)))
- return -1;
-
- if (strchr(cpumaskStr, ',') &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("disjoint NUMA cpu ranges are not supported "
- "with this QEMU"));
- return -1;
- }
- }
- }
-
if (virDomainNumaHasHMAT(def->numa)) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA_HMAT)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+++ /dev/null
-unsupported configuration: disjoint NUMA cpu ranges are not supported with this QEMU
-overcommit mem-lock=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,prealloc=on,size=15032385536 \
--numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
+-numa node,nodeid=0,cpus=0-7,cpus=16-19,memdev=ram-node0 \
-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 \
<cpu>
<topology sockets='1' dies='1' cores='8' threads='1'/>
<numa>
- <cell id='0' cpus='0-7' memory='14680064' unit='KiB'/>
+ <cell id='0' cpus='0-7,16-19' memory='14680064' unit='KiB'/>
<cell id='1' cpus='8-15' memory='14680064' unit='KiB' memAccess='shared'/>
</numa>
</cpu>
-overcommit mem-lock=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,prealloc=on,size=15032385536 \
--numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+-numa node,nodeid=0,cpus=0-1,cpus=6-31,memdev=ram-node0 \
-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,prealloc=on,size=15032385536 \
<cpu>
<topology sockets='1' dies='1' cores='24' threads='1'/>
<numa>
- <cell id='0' cpus='0-1' memory='14680064' unit='KiB'/>
+ <cell id='0' cpus='0-1,6-31' memory='14680064' unit='KiB'/>
<cell id='1' cpus='2-3' memory='14680064' unit='KiB' memAccess='shared'/>
<cell id='2' cpus='4-5' memory='14680064' unit='KiB' memAccess='private'/>
</numa>
+++ /dev/null
-unsupported configuration: disjoint NUMA cpu ranges are not supported with this QEMU
ARG_MIGRATE_FROM, "stdio",
ARG_MIGRATE_FD, 7,
ARG_QEMU_CAPS,
- QEMU_CAPS_NUMA,
QEMU_CAPS_LAST,
ARG_END);
DO_TEST_NOCAPS("cpu-numa2");
DO_TEST_NOCAPS("cpu-numa-no-memory-element");
DO_TEST_PARSE_ERROR_NOCAPS("cpu-numa3");
- DO_TEST_PARSE_ERROR_NOCAPS("cpu-numa-disjoint");
- DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
+ DO_TEST_NOCAPS("cpu-numa-disjoint");
DO_TEST_NOCAPS("cpu-numa-memshared");
DO_TEST("cpu-host-model",
QEMU_CAPS_DEVICE_PCI_BRIDGE,
DO_TEST_NOCAPS("numatune-memory");
DO_TEST_PARSE_ERROR_NOCAPS("numatune-memory-invalid-nodeset");
- DO_TEST("numatune-memnode",
- QEMU_CAPS_NUMA);
- DO_TEST_PARSE_ERROR_NOCAPS("numatune-memnode");
+ DO_TEST_NOCAPS("numatune-memnode");
DO_TEST_CAPS_VER("numatune-memnode", "5.2.0");
DO_TEST_CAPS_LATEST("numatune-memnode");
DO_TEST_PARSE_ERROR_NOCAPS("numatune-memnode-invalid-mode");
DO_TEST_CAPS_LATEST("numatune-memnode-restrictive-mode");
DO_TEST_CAPS_LATEST("numatune-system-memory");
- DO_TEST("numatune-memnode-no-memory",
- QEMU_CAPS_NUMA);
+ DO_TEST_NOCAPS("numatune-memnode-no-memory");
- DO_TEST("numatune-distances", QEMU_CAPS_NUMA);
+ DO_TEST_NOCAPS("numatune-distances");
DO_TEST_NOCAPS("numatune-no-vcpu");
DO_TEST_CAPS_LATEST("numatune-hmat");
DO_TEST_PARSE_ERROR("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
DO_TEST_PARSE_ERROR_NOCAPS("memory-hotplug-invalid-targetnode");
DO_TEST_NOCAPS("memory-hotplug");
- DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
- DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
+ DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM);
+ DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM);
DO_TEST_CAPS_LATEST("memory-hotplug-dimm-addr");
- DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
+ DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM,
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
DO_TEST_FULL("memory-hotplug-ppc64-nonuma-abi-update", "",
ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
ARG_QEMU_CAPS,
QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM,
- QEMU_CAPS_NUMA, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
+ QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
QEMU_CAPS_LAST,
ARG_END);
DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
DO_TEST_NOCAPS("cpu-numa2");
DO_TEST_NOCAPS("cpu-numa-no-memory-element");
DO_TEST_NOCAPS("cpu-numa-disordered");
- DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
+ DO_TEST_NOCAPS("cpu-numa-disjoint");
DO_TEST_NOCAPS("cpu-numa-memshared");
DO_TEST_NOCAPS("numatune-auto-prefer");
- DO_TEST("numatune-memnode", QEMU_CAPS_NUMA);
+ DO_TEST_NOCAPS("numatune-memnode");
DO_TEST_NOCAPS("numatune-memnode-no-memory");
- DO_TEST("numatune-distances", QEMU_CAPS_NUMA);
- DO_TEST("numatune-no-vcpu", QEMU_CAPS_NUMA);
+ DO_TEST_NOCAPS("numatune-distances");
+ DO_TEST_NOCAPS("numatune-no-vcpu");
DO_TEST("numatune-hmat", QEMU_CAPS_NUMA_HMAT);
DO_TEST_CAPS_LATEST("numatune-memnode-restrictive-mode");
/* SVE aarch64 CPU features work on modern QEMU */
DO_TEST_CAPS_ARCH_LATEST("aarch64-features-sve", "aarch64");
- DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
+ DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM,
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
DO_TEST_FULL("memory-hotplug-ppc64-nonuma-abi-update", "", WHEN_BOTH,
ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
ARG_QEMU_CAPS,
QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM,
- QEMU_CAPS_NUMA, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
+ QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
QEMU_CAPS_LAST, ARG_END);
DO_TEST_NOCAPS("memory-hotplug");
DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM);