From nobody Thu May 2 14:37:37 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1507837004079197.42518601637983;
Thu, 12 Oct 2017 12:36:44 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com
[10.5.11.16])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id B2C8163E12;
Thu, 12 Oct 2017 19:36:42 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 8AD145C89F;
Thu, 12 Oct 2017 19:36:42 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id 4F75318355DF;
Thu, 12 Oct 2017 19:36:42 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com
[10.5.11.12])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id v9CJWGsT006071 for ;
Thu, 12 Oct 2017 15:32:16 -0400
Received: by smtp.corp.redhat.com (Postfix)
id 251E817B8A; Thu, 12 Oct 2017 19:32:16 +0000 (UTC)
Received: from mx1.redhat.com (ext-mx02.extmail.prod.ext.phx2.redhat.com
[10.5.110.26])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 1EB3E6957D
for ; Thu, 12 Oct 2017 19:32:13 +0000 (UTC)
Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id BDD38820F7
for ; Thu, 12 Oct 2017 19:32:11 +0000 (UTC)
Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233])
by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with
ESMTP id v9CJWAoX019023
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Thu, 12 Oct 2017 19:32:10 GMT
Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235])
by aserv0021.oracle.com (8.14.4/8.14.4) with ESMTP id v9CJWAMM007120
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256
verify=OK); Thu, 12 Oct 2017 19:32:10 GMT
Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8])
by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id v9CJW9b5011987;
Thu, 12 Oct 2017 19:32:09 GMT
Received: from nina.dynamic.ziggo.nl (/10.175.236.97)
by default (Oracle Beehive Gateway v4.0)
with ESMTP ; Thu, 12 Oct 2017 12:32:09 -0700
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B2C8163E12
Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com;
dmarc=fail (p=none dis=none) header.from=oracle.com
Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com;
spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com B2C8163E12
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BDD38820F7
Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com;
dmarc=pass (p=none dis=none) header.from=oracle.com
Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com;
spf=pass smtp.mailfrom=wim.ten.have@oracle.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com BDD38820F7
From: Wim Ten Have
To: Libvirt Development List
Date: Thu, 12 Oct 2017 21:31:54 +0200
Message-Id: <20171012193157.2711-2-wim.ten.have@oracle.com>
In-Reply-To: <20171012193157.2711-1-wim.ten.have@oracle.com>
References: <20171012193157.2711-1-wim.ten.have@oracle.com>
X-Source-IP: aserv0021.oracle.com [141.146.126.233]
X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 205
matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com
[10.5.110.26]); Thu, 12 Oct 2017 19:32:12 +0000 (UTC)
X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com
[10.5.110.26]);
Thu, 12 Oct 2017 19:32:12 +0000 (UTC) for IP:'156.151.31.81'
DOMAIN:'userp1040.oracle.com' HELO:'userp1040.oracle.com'
FROM:'wim.ten.have@oracle.com' RCPT:''
X-RedHat-Spam-Score: -105.101 (RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H2,
RP_MATCHES_RCVD, SPF_PASS, UNPARSEABLE_RELAY,
USER_IN_WHITELIST) 156.151.31.81 userp1040.oracle.com 156.151.31.81
userp1040.oracle.com
X-Scanned-By: MIMEDefang 2.78 on 10.5.110.26
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12
X-loop: libvir-list@redhat.com
Cc: Wim ten Have
Subject: [libvirt] [PATCH v5 1/4] numa: describe siblings distances within
cells
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]);
Thu, 12 Oct 2017 19:36:43 +0000 (UTC)
X-ZohoMail: RSF_0 Z_629925259 SPT_0
Content-Type: text/plain; charset="utf-8"
From: Wim ten Have
Add support for describing NUMA distances in a domain's
XML description.
Below is an example of a 4 node setup:
|
|
|
|
A defines a NUMA node. describes the NUMA distance
from the to the other NUMA nodes (the s). For example,
in above XML description, the distance between NUMA node0 and NUMA node2 is 31.
Valid distance value are '10 <=3D value <=3D 255'. A distance value of 10
represents the distance to the node itself. A distance value of 20
represents the default value for remote nodes but other values are
possible depending on the physical topology of the system.
When distances are not fully described, any missing sibling distance
values will default to 10 for local nodes and 20 for remote nodes.
Signed-off-by: Wim ten Have
Reviewed-by: Daniel P. Berrange
---
Changes on v1:
- Add changes to docs/formatdomain.html.in describing schema update.
Changes on v2:
- Automatically apply distance symmetry maintaining cell <-> sibling.
- Check for maximum '255' on numaDistanceValue.
- Automatically complete empty distance ranges.
- Check that sibling_id's are in range with cell identifiers.
- Allow non-contiguous ranges, starting from any node id.
- Respect parameters as ATTRIBUTE_NONNULL fix functions and callers.
- Add and apply topology for LOCAL_DISTANCE=3D10 and REMOTE_DISTANCE=3D20.
Changes on v3
- Add UNREACHABLE if one locality is unreachable from another.
- Add code cleanup aligning function naming in a separated patch.
- Add numa related driver code in a separated patch.
- Remove from numaDistanceValue schema/basictypes.rng
- Correct doc changes.
Changes on v4
- Fix symmetry error under virDomainNumaDefNodeDistanceParseXML()
---
docs/formatdomain.html.in | 63 ++++++++++++-
docs/schemas/basictypes.rng | 7 ++
docs/schemas/cputypes.rng | 18 ++++
src/conf/numa_conf.c | 221 ++++++++++++++++++++++++++++++++++++++++=
+++-
4 files changed, 305 insertions(+), 4 deletions(-)
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index c0e3c2221..ab2a89c6a 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -1529,7 +1529,68 @@
| | | |
=20
- This guest NUMA specification is currently available only for QEMU/K=
VM.
+ This guest NUMA specification is currently available only for
+ QEMU/KVM and Xen. Whereas Xen driver also allows for a distinct
+ description of NUMA arranged sibling
cell
+ distances
Since 3.8.0 .
+
+
+
+ Under NUMA h/w architecture, distinct resources such as memory
+ create a designated distance between cell
and
+ siblings
that now can be described with the help of
+ distances
. A detailed description can be found within
+ the ACPI (Advanced Configuration and Power Interface Specification)
+ within the chapter explaining the system's SLIT (System Locality
+ Distance Information Table).
+
+
+
+...
+<cpu>
+ ...
+ <numa>
+ <cell id=3D'0' cpus=3D'0,4-7' memory=3D'512000' unit=3D'KiB'>
+ <distances>
+ <sibling id=3D'0' value=3D'10'/>
+ <sibling id=3D'1' value=3D'21'/>
+ <sibling id=3D'2' value=3D'31'/>
+ <sibling id=3D'3' value=3D'41'/>
+ </distances>
+ </cell>
+ <cell id=3D'1' cpus=3D'1,8-10,12-15' memory=3D'512000' unit=3D'KiB'=
memAccess=3D'shared'>
+ <distances>
+ <sibling id=3D'0' value=3D'21'/>
+ <sibling id=3D'1' value=3D'10'/>
+ <sibling id=3D'2' value=3D'21'/>
+ <sibling id=3D'3' value=3D'31'/>
+ </distances>
+ </cell>
+ <cell id=3D'2' cpus=3D'2,11' memory=3D'512000' unit=3D'KiB' memAcce=
ss=3D'shared'>
+ <distances>
+ <sibling id=3D'0' value=3D'31'/>
+ <sibling id=3D'1' value=3D'21'/>
+ <sibling id=3D'2' value=3D'10'/>
+ <sibling id=3D'3' value=3D'21'/>
+ </distances>
+ </cell>
+ <cell id=3D'3' cpus=3D'3' memory=3D'512000' unit=3D'KiB'>
+ <distances>
+ <sibling id=3D'0' value=3D'41'/>
+ <sibling id=3D'1' value=3D'31'/>
+ <sibling id=3D'2' value=3D'21'/>
+ <sibling id=3D'3' value=3D'10'/>
+ </distances>
+ </cell>
+ </numa>
+ ...
+</cpu>
+...
+
+
+ Under Xen driver, if no distances
are given to describe
+ the SLIT data between different cells, it will default to a scheme
+ using 10 for local and 20 for remote distances.
=20
diff --git a/docs/schemas/basictypes.rng b/docs/schemas/basictypes.rng
index 1ea667cdf..1a18cd31b 100644
--- a/docs/schemas/basictypes.rng
+++ b/docs/schemas/basictypes.rng
@@ -77,6 +77,13 @@
=20
+
+
+ 10
+ 255
+
+
+
diff --git a/docs/schemas/cputypes.rng b/docs/schemas/cputypes.rng
index 3eef16abc..c45b6dfb2 100644
--- a/docs/schemas/cputypes.rng
+++ b/docs/schemas/cputypes.rng
@@ -129,6 +129,24 @@
+
+
+
+ [
+ ]
+
+
+
+
+
+
+
+
+ [
+ ]
+
+ [
+ ]
=20
diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
index b71dc012c..00a3343fb 100644
--- a/src/conf/numa_conf.c
+++ b/src/conf/numa_conf.c
@@ -29,6 +29,15 @@
#include "virnuma.h"
#include "virstring.h"
=20
+/*
+ * Distance definitions defined Conform ACPI 2.0 SLIT.
+ * See include/linux/topology.h
+ */
+#define LOCAL_DISTANCE 10
+#define REMOTE_DISTANCE 20
+/* SLIT entry value is a one-byte unsigned integer. */
+#define UNREACHABLE 255
+
#define VIR_FROM_THIS VIR_FROM_DOMAIN
=20
VIR_ENUM_IMPL(virDomainNumatuneMemMode,
@@ -48,6 +57,8 @@ VIR_ENUM_IMPL(virDomainMemoryAccess, VIR_DOMAIN_MEMORY_AC=
CESS_LAST,
"shared",
"private")
=20
+typedef struct _virDomainNumaDistance virDomainNumaDistance;
+typedef virDomainNumaDistance *virDomainNumaDistancePtr;
=20
typedef struct _virDomainNumaNode virDomainNumaNode;
typedef virDomainNumaNode *virDomainNumaNodePtr;
@@ -66,6 +77,12 @@ struct _virDomainNuma {
virBitmapPtr nodeset; /* host memory nodes where this guest node=
resides */
virDomainNumatuneMemMode mode; /* memory mode selection */
virDomainMemoryAccess memAccess; /* shared memory access configura=
tion */
+
+ struct _virDomainNumaDistance {
+ unsigned int value; /* locality value for node i->j or j->i */
+ unsigned int cellid;
+ } *distances; /* remote node distances */
+ size_t ndistances;
} *mem_nodes; /* guest node configuration */
size_t nmem_nodes;
=20
@@ -686,6 +703,174 @@ virDomainNumatuneNodesetIsAvailable(virDomainNumaPtr =
numatune,
}
=20
=20
+static int
+virDomainNumaDefNodeDistanceParseXML(virDomainNumaPtr def,
+ xmlXPathContextPtr ctxt,
+ unsigned int cur_cell)
+{
+ int ret =3D -1;
+ int sibling;
+ char *tmp =3D NULL;
+ xmlNodePtr *nodes =3D NULL;
+ size_t i, ndistances =3D def->nmem_nodes;
+
+ if (!ndistances)
+ return 0;
+
+ /* check if NUMA distances definition is present */
+ if (!virXPathNode("./distances[1]", ctxt))
+ return 0;
+
+ if ((sibling =3D virXPathNodeSet("./distances[1]/sibling", ctxt, &node=
s)) <=3D 0) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("NUMA distances defined without siblings"));
+ goto cleanup;
+ }
+
+ for (i =3D 0; i < sibling; i++) {
+ virDomainNumaDistancePtr ldist, rdist;
+ unsigned int sibling_id, sibling_value;
+
+ /* siblings are in order of parsing or explicitly numbered */
+ if (!(tmp =3D virXMLPropString(nodes[i], "id"))) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Missing 'id' attribute in NUMA "
+ "distances under 'cell id %d'"),
+ cur_cell);
+ goto cleanup;
+ }
+
+ /* The "id" needs to be applicable */
+ if (virStrToLong_uip(tmp, NULL, 10, &sibling_id) < 0) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Invalid 'id' attribute in NUMA "
+ "distances for sibling: '%s'"),
+ tmp);
+ goto cleanup;
+ }
+ VIR_FREE(tmp);
+
+ /* The "id" needs to be within numa/cell range */
+ if (sibling_id >=3D ndistances) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("There is no cell administrated matching "
+ "'sibling_id %d' under NUMA 'cell id %d' "),
+ sibling_id, cur_cell);
+ goto cleanup;
+ }
+
+ /* We need a locality value. Check and correct
+ * distance to local and distance to remote node.
+ */
+ if (!(tmp =3D virXMLPropString(nodes[i], "value"))) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Missing 'value' attribute in NUMA distances "
+ "under 'cell id %d' for 'sibling id %d'"),
+ cur_cell, sibling_id);
+ goto cleanup;
+ }
+
+ /* The "value" needs to be applicable */
+ if (virStrToLong_uip(tmp, NULL, 10, &sibling_value) < 0) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Invalid 'value' attribute in NUMA "
+ "distances for value: '%s'"),
+ tmp);
+ goto cleanup;
+ }
+ VIR_FREE(tmp);
+
+ /* LOCAL_DISTANCE <=3D "value" <=3D UNREACHABLE */
+ if (sibling_value < LOCAL_DISTANCE ||
+ sibling_value > UNREACHABLE) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Out of range value '%d' set for "
+ "'sibling id %d' under NUMA 'cell id %d' "),
+ sibling_value, sibling_id, cur_cell);
+ goto cleanup;
+ }
+
+ /* Assure correct LOCAL_DISTANCE setting if given */
+ if (sibling_id =3D=3D cur_cell &&
+ sibling_value !=3D LOCAL_DISTANCE) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Invalid value '%d !LOCAL_DISTANCE' set for "
+ "'sibling id %d' under NUMA 'cell id %d' "),
+ sibling_value, sibling_id, cur_cell);
+ goto cleanup;
+ }
+
+ /* Assure correct LOCAL_DISTANCE setting if given */
+ if (sibling_id !=3D cur_cell &&
+ sibling_value =3D=3D LOCAL_DISTANCE) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Invalid value '%d LOCAL_DISTANCE' set for "
+ "'sibling id %d' under NUMA 'cell id %d' "),
+ sibling_value, sibling_id, cur_cell);
+ goto cleanup;
+ }
+
+ /* Apply the local / remote distance */
+ ldist =3D def->mem_nodes[cur_cell].distances;
+ if (!ldist) {
+ if (def->mem_nodes[cur_cell].ndistances) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Invalid 'ndistances' set in NUMA "
+ "distances for sibling id: '%d'"),
+ cur_cell);
+ goto cleanup;
+ }
+
+ if (VIR_ALLOC_N(ldist, ndistances) < 0)
+ goto cleanup;
+
+ ldist[cur_cell].value =3D LOCAL_DISTANCE;
+ ldist[cur_cell].cellid =3D cur_cell;
+ def->mem_nodes[cur_cell].ndistances =3D ndistances;
+ }
+
+ ldist[sibling_id].cellid =3D sibling_id;
+ ldist[sibling_id].value =3D sibling_value;
+ def->mem_nodes[cur_cell].distances =3D ldist;
+
+ /* Apply symmetry if none given */
+ rdist =3D def->mem_nodes[sibling_id].distances;
+ if (!rdist) {
+ if (def->mem_nodes[sibling_id].ndistances) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Invalid 'ndistances' set in NUMA "
+ "distances for sibling id: '%d'"),
+ sibling_id);
+ goto cleanup;
+ }
+
+ if (VIR_ALLOC_N(rdist, ndistances) < 0)
+ goto cleanup;
+
+ rdist[sibling_id].value =3D LOCAL_DISTANCE;
+ rdist[sibling_id].cellid =3D sibling_id;
+ def->mem_nodes[sibling_id].ndistances =3D ndistances;
+ }
+
+ rdist[cur_cell].cellid =3D cur_cell;
+ if (!rdist[cur_cell].value)
+ rdist[cur_cell].value =3D sibling_value;
+ def->mem_nodes[sibling_id].distances =3D rdist;
+ }
+
+ ret =3D 0;
+
+ cleanup:
+ if (ret) {
+ for (i =3D 0; i < ndistances; i++)
+ VIR_FREE(def->mem_nodes[i].distances);
+ }
+ VIR_FREE(nodes);
+ VIR_FREE(tmp);
+
+ return ret;
+}
+
int
virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
xmlXPathContextPtr ctxt)
@@ -694,7 +879,7 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
xmlNodePtr oldNode =3D ctxt->node;
char *tmp =3D NULL;
int n;
- size_t i;
+ size_t i, j;
int ret =3D -1;
=20
/* check if NUMA definition is present */
@@ -712,7 +897,6 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
def->nmem_nodes =3D n;
=20
for (i =3D 0; i < n; i++) {
- size_t j;
int rc;
unsigned int cur_cell =3D i;
=20
@@ -788,6 +972,10 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
def->mem_nodes[cur_cell].memAccess =3D rc;
VIR_FREE(tmp);
}
+
+ /* Parse NUMA distances info */
+ if (virDomainNumaDefNodeDistanceParseXML(def, ctxt, cur_cell) < 0)
+ goto cleanup;
}
=20
ret =3D 0;
@@ -815,6 +1003,8 @@ virDomainNumaDefCPUFormatXML(virBufferPtr buf,
virBufferAddLit(buf, "\n");
virBufferAdjustIndent(buf, 2);
for (i =3D 0; i < ncells; i++) {
+ int ndistances;
+
memAccess =3D virDomainNumaGetNodeMemoryAccessMode(def, i);
=20
if (!(cpustr =3D virBitmapFormat(virDomainNumaGetNodeCpumask(def, =
i))))
@@ -829,7 +1019,32 @@ virDomainNumaDefCPUFormatXML(virBufferPtr buf,
if (memAccess)
virBufferAsprintf(buf, " memAccess=3D'%s'",
virDomainMemoryAccessTypeToString(memAccess)=
);
- virBufferAddLit(buf, "/>\n");
+
+ ndistances =3D def->mem_nodes[i].ndistances;
+ if (!ndistances) {
+ virBufferAddLit(buf, "/>\n");
+ } else {
+ size_t j;
+ virDomainNumaDistancePtr distances =3D def->mem_nodes[i].dista=
nces;
+
+ virBufferAddLit(buf, ">\n");
+ virBufferAdjustIndent(buf, 2);
+ virBufferAddLit(buf, "\n");
+ virBufferAdjustIndent(buf, 2);
+ for (j =3D 0; j < ndistances; j++) {
+ if (distances[j].value) {
+ virBufferAddLit(buf, " \n");
+ }
+ }
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, " \n");
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "\n");
+ }
+
VIR_FREE(cpustr);
}
virBufferAdjustIndent(buf, -2);
--=20
2.13.6
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Thu May 2 14:37:37 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1507836998777134.43269654394805;
Thu, 12 Oct 2017 12:36:38 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com
[10.5.11.11])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 7C5E6CF483;
Thu, 12 Oct 2017 19:36:37 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 51EA26017B;
Thu, 12 Oct 2017 19:36:37 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id 1BF1C410B3;
Thu, 12 Oct 2017 19:36:37 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com
[10.5.11.16])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id v9CJWFNk006056 for ;
Thu, 12 Oct 2017 15:32:15 -0400
Received: by smtp.corp.redhat.com (Postfix)
id 66CC95C1A3; Thu, 12 Oct 2017 19:32:15 +0000 (UTC)
Received: from mx1.redhat.com (ext-mx02.extmail.prod.ext.phx2.redhat.com
[10.5.110.26])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 616695C88D
for ; Thu, 12 Oct 2017 19:32:15 +0000 (UTC)
Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id EE6248765E
for ; Thu, 12 Oct 2017 19:32:12 +0000 (UTC)
Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74])
by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with
ESMTP id v9CJWBAd011871
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Thu, 12 Oct 2017 19:32:12 GMT
Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235])
by userv0022.oracle.com (8.14.4/8.14.4) with ESMTP id v9CJWB1v028263
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256
verify=OK); Thu, 12 Oct 2017 19:32:11 GMT
Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8])
by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id v9CJWB8p012012;
Thu, 12 Oct 2017 19:32:11 GMT
Received: from nina.dynamic.ziggo.nl (/10.175.236.97)
by default (Oracle Beehive Gateway v4.0)
with ESMTP ; Thu, 12 Oct 2017 12:32:10 -0700
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 7C5E6CF483
Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com;
dmarc=fail (p=none dis=none) header.from=oracle.com
Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com;
spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 7C5E6CF483
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com EE6248765E
Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com;
dmarc=pass (p=none dis=none) header.from=oracle.com
Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com;
spf=pass smtp.mailfrom=wim.ten.have@oracle.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com EE6248765E
From: Wim Ten Have
To: Libvirt Development List
Date: Thu, 12 Oct 2017 21:31:55 +0200
Message-Id: <20171012193157.2711-3-wim.ten.have@oracle.com>
In-Reply-To: <20171012193157.2711-1-wim.ten.have@oracle.com>
References: <20171012193157.2711-1-wim.ten.have@oracle.com>
X-Source-IP: userv0022.oracle.com [156.151.31.74]
X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 205
matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com
[10.5.110.26]); Thu, 12 Oct 2017 19:32:13 +0000 (UTC)
X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com
[10.5.110.26]);
Thu, 12 Oct 2017 19:32:13 +0000 (UTC) for IP:'141.146.126.69'
DOMAIN:'aserp1040.oracle.com' HELO:'aserp1040.oracle.com'
FROM:'wim.ten.have@oracle.com' RCPT:''
X-RedHat-Spam-Score: -102.321 (RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H4,
RCVD_IN_MSPIKE_WL, RP_MATCHES_RCVD, SPF_PASS, UNPARSEABLE_RELAY,
USER_IN_WHITELIST) 141.146.126.69 aserp1040.oracle.com 141.146.126.69
aserp1040.oracle.com
X-Scanned-By: MIMEDefang 2.78 on 10.5.110.26
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16
X-loop: libvir-list@redhat.com
Cc: Wim ten Have
Subject: [libvirt] [PATCH v5 2/4] xenconfig: add domxml conversions for
xen-xl
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]);
Thu, 12 Oct 2017 19:36:38 +0000 (UTC)
X-ZohoMail: RSF_0 Z_629925259 SPT_0
Content-Type: text/plain; charset="utf-8"
From: Wim ten Have
This patch converts NUMA configurations between the Xen libxl
configuration file format and libvirt's XML format.
XML HVM domain on a 4 node (2 cores/socket) configuration:
|
|
|
|
Xen xl.cfg domain configuration:
vnuma =3D [["pnode=3D0","size=3D2048","vcpus=3D0-1","vdistances=3D10,21,3=
1,21"],
["pnode=3D1","size=3D2048","vcpus=3D2-3","vdistances=3D21,10,21,=
31"],
["pnode=3D2","size=3D2048","vcpus=3D4-5","vdistances=3D31,21,10,=
21"],
["pnode=3D3","size=3D2048","vcpus=3D6-7","vdistances=3D21,31,21,=
10"]]
If there is no XML description amongst the data the
conversion schema from xml to native will generate 10 for local and 20
for all remote instances.
Signed-off-by: Wim ten Have
---
Changes on v2:
- Reduce the indentation level under xenParseXLVnuma().
Changes on v3:
- Add the Numa core split functions required to interface.
---
src/conf/numa_conf.c | 138 ++++++++++++++++++++
src/conf/numa_conf.h | 20 +++
src/libvirt_private.syms | 5 +
src/xenconfig/xen_xl.c | 333 +++++++++++++++++++++++++++++++++++++++++++=
++++
4 files changed, 496 insertions(+)
diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
index 00a3343fb..b513b1de1 100644
--- a/src/conf/numa_conf.c
+++ b/src/conf/numa_conf.c
@@ -1144,6 +1144,133 @@ virDomainNumaGetNodeCount(virDomainNumaPtr numa)
}
=20
=20
+size_t
+virDomainNumaSetNodeCount(virDomainNumaPtr numa, size_t nmem_nodes)
+{
+ if (!nmem_nodes) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Cannot set an empty mem_nodes set"));
+ return 0;
+ }
+
+ if (numa->mem_nodes) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Cannot alter an existing mem_nodes set"));
+ return 0;
+ }
+
+ if (VIR_ALLOC_N(numa->mem_nodes, nmem_nodes) < 0)
+ return 0;
+
+ numa->nmem_nodes =3D nmem_nodes;
+
+ return numa->nmem_nodes;
+}
+
+size_t
+virDomainNumaGetNodeDistance(virDomainNumaPtr numa,
+ size_t node,
+ size_t cellid)
+{
+ virDomainNumaDistancePtr distances =3D NULL;
+
+ if (node < numa->nmem_nodes)
+ distances =3D numa->mem_nodes[node].distances;
+
+ /*
+ * Present the configured distance value. If
+ * out of range or not available set the platform
+ * defined default for local and remote nodes.
+ */
+ if (!distances ||
+ !distances[cellid].value ||
+ !numa->mem_nodes[node].ndistances)
+ return (node =3D=3D cellid) ? \
+ LOCAL_DISTANCE : REMOTE_DISTANCE;
+
+ return distances[cellid].value;
+}
+
+
+int
+virDomainNumaSetNodeDistance(virDomainNumaPtr numa,
+ size_t node,
+ size_t cellid,
+ unsigned int value)
+{
+ virDomainNumaDistancePtr distances;
+
+ if (node >=3D numa->nmem_nodes) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Argument 'node' %zu outranges "
+ "defined number of NUMA nodes"),
+ node);
+ return -1;
+ }
+
+ distances =3D numa->mem_nodes[node].distances;
+ if (!distances ||
+ cellid >=3D numa->mem_nodes[node].ndistances) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("Arguments under memnode element do not "
+ "correspond with existing guest's NUMA cell"));
+ return -1;
+ }
+
+ /*
+ * Advanced Configuration and Power Interface
+ * Specification version 6.1. Chapter 5.2.17
+ * System Locality Distance Information Table
+ * ... Distance values of 0-9 are reserved.
+ */
+ if (value < LOCAL_DISTANCE ||
+ value > UNREACHABLE) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Distance value of %d is in 0-9 reserved range"),
+ value);
+ return -1;
+ }
+
+ if (value =3D=3D LOCAL_DISTANCE && node !=3D cellid) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Distance value %d under node %zu seems "
+ "LOCAL_DISTANCE and should be set to 10"),
+ value, node);
+ return -1;
+ }
+
+ distances[cellid].cellid =3D cellid;
+ distances[cellid].value =3D value;
+
+ return distances[cellid].value;
+}
+
+
+size_t
+virDomainNumaSetNodeDistanceCount(virDomainNumaPtr numa,
+ size_t node,
+ size_t ndistances)
+{
+ virDomainNumaDistancePtr distances;
+
+ distances =3D numa->mem_nodes[node].distances;
+ if (distances) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Cannot alter an existing nmem_nodes distances se=
t for node: %zu"),
+ node);
+ return 0;
+ }
+
+ if (VIR_ALLOC_N(distances, ndistances) < 0)
+ return 0;
+
+ numa->mem_nodes[node].distances =3D distances;
+ numa->mem_nodes[node].ndistances =3D ndistances;
+
+ return numa->mem_nodes[node].ndistances;
+}
+
+
virBitmapPtr
virDomainNumaGetNodeCpumask(virDomainNumaPtr numa,
size_t node)
@@ -1152,6 +1279,17 @@ virDomainNumaGetNodeCpumask(virDomainNumaPtr numa,
}
=20
=20
+virBitmapPtr
+virDomainNumaSetNodeCpumask(virDomainNumaPtr numa,
+ size_t node,
+ virBitmapPtr cpumask)
+{
+ numa->mem_nodes[node].cpumask =3D cpumask;
+
+ return numa->mem_nodes[node].cpumask;
+}
+
+
virDomainMemoryAccess
virDomainNumaGetNodeMemoryAccessMode(virDomainNumaPtr numa,
size_t node)
diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h
index 378b772e4..8184b528b 100644
--- a/src/conf/numa_conf.h
+++ b/src/conf/numa_conf.h
@@ -87,12 +87,32 @@ int virDomainNumatuneMaybeGetNodeset(virDomainNumaPtr n=
umatune,
=20
size_t virDomainNumaGetNodeCount(virDomainNumaPtr numa);
=20
+size_t virDomainNumaSetNodeCount(virDomainNumaPtr numa,
+ size_t nmem_nodes)
+ ATTRIBUTE_NONNULL(1);
+size_t virDomainNumaGetNodeDistance(virDomainNumaPtr numa,
+ size_t node,
+ size_t sibling)
+ ATTRIBUTE_NONNULL(1);
+int virDomainNumaSetNodeDistance(virDomainNumaPtr numa,
+ size_t node,
+ size_t sibling,
+ unsigned int value)
+ ATTRIBUTE_NONNULL(1);
+size_t virDomainNumaSetNodeDistanceCount(virDomainNumaPtr numa,
+ size_t node,
+ size_t ndistances)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3);
virBitmapPtr virDomainNumaGetNodeCpumask(virDomainNumaPtr numa,
size_t node)
ATTRIBUTE_NONNULL(1);
virDomainMemoryAccess virDomainNumaGetNodeMemoryAccessMode(virDomainNumaPt=
r numa,
size_t node)
ATTRIBUTE_NONNULL(1);
+virBitmapPtr virDomainNumaSetNodeCpumask(virDomainNumaPtr numa,
+ size_t node,
+ virBitmapPtr cpumask)
+ ATTRIBUTE_NONNULL(1);
unsigned long long virDomainNumaGetNodeMemorySize(virDomainNumaPtr numa,
size_t node)
ATTRIBUTE_NONNULL(1);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 26c5ddb40..861660b94 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -713,9 +713,14 @@ virDomainNumaGetMaxCPUID;
virDomainNumaGetMemorySize;
virDomainNumaGetNodeCount;
virDomainNumaGetNodeCpumask;
+virDomainNumaGetNodeDistance;
virDomainNumaGetNodeMemoryAccessMode;
virDomainNumaGetNodeMemorySize;
virDomainNumaNew;
+virDomainNumaSetNodeCount;
+virDomainNumaSetNodeCpumask;
+virDomainNumaSetNodeDistance;
+virDomainNumaSetNodeDistanceCount;
virDomainNumaSetNodeMemorySize;
virDomainNumatuneFormatNodeset;
virDomainNumatuneFormatXML;
diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c
index 8acbfe3f6..54b2ac650 100644
--- a/src/xenconfig/xen_xl.c
+++ b/src/xenconfig/xen_xl.c
@@ -309,6 +309,205 @@ xenParseXLSpice(virConfPtr conf, virDomainDefPtr def)
return -1;
}
=20
+#ifdef LIBXL_HAVE_VNUMA
+static int
+xenParseXLVnuma(virConfPtr conf, virDomainDefPtr def)
+{
+ int ret =3D -1;
+ char *tmp =3D NULL;
+ char **token =3D NULL;
+ size_t vcpus =3D 0;
+ size_t nr_nodes =3D 0;
+ size_t vnodeCnt =3D 0;
+ virCPUDefPtr cpu =3D NULL;
+ virConfValuePtr list;
+ virConfValuePtr vnode;
+ virDomainNumaPtr numa;
+
+ numa =3D def->numa;
+ if (numa =3D=3D NULL)
+ return -1;
+
+ list =3D virConfGetValue(conf, "vnuma");
+ if (!list || list->type !=3D VIR_CONF_LIST)
+ return 0;
+
+ vnode =3D list->list;
+ while (vnode && vnode->type =3D=3D VIR_CONF_LIST) {
+ vnode =3D vnode->next;
+ nr_nodes++;
+ }
+
+ if (!virDomainNumaSetNodeCount(numa, nr_nodes))
+ goto cleanup;
+
+ if (VIR_ALLOC(cpu) < 0)
+ goto cleanup;
+
+ list =3D list->list;
+ while (list) {
+ int pnode =3D -1;
+ virBitmapPtr cpumask =3D NULL;
+ unsigned long long kbsize =3D 0;
+
+ /* Is there a sublist (vnode)? */
+ if (list && list->type =3D=3D VIR_CONF_LIST) {
+ vnode =3D list->list;
+
+ while (vnode && vnode->type =3D=3D VIR_CONF_STRING) {
+ const char *data;
+ const char *str =3D vnode->str;
+
+ if (!str ||
+ !(data =3D strrchr(str, '=3D'))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("vnuma vnode invalid format '%s'"),
+ str);
+ goto cleanup;
+ }
+ data++;
+
+ if (*data) {
+ size_t len;
+ char vtoken[64];
+
+ if (STRPREFIX(str, "pnode")) {
+ unsigned int cellid;
+
+ len =3D strlen(data);
+ if (!virStrncpy(vtoken, data,
+ len, sizeof(vtoken))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("vnuma vnode %zu pnode '%s' t=
oo long for destination"),
+ vnodeCnt, data);
+ goto cleanup;
+ }
+
+ if ((virStrToLong_ui(vtoken, NULL, 10, &cellid) < =
0) ||
+ (cellid >=3D nr_nodes)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("vnuma vnode %zu invalid valu=
e pnode '%s'"),
+ vnodeCnt, data);
+ goto cleanup;
+ }
+ pnode =3D cellid;
+ } else if (STRPREFIX(str, "size")) {
+ len =3D strlen(data);
+ if (!virStrncpy(vtoken, data,
+ len, sizeof(vtoken))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("vnuma vnode %zu size '%s' to=
o long for destination"),
+ vnodeCnt, data);
+ goto cleanup;
+ }
+
+ if (virStrToLong_ull(vtoken, NULL, 10, &kbsize) < =
0)
+ goto cleanup;
+
+ virDomainNumaSetNodeMemorySize(numa, vnodeCnt, (kb=
size * 1024));
+
+ } else if (STRPREFIX(str, "vcpus")) {
+ len =3D strlen(data);
+ if (!virStrncpy(vtoken, data,
+ len, sizeof(vtoken))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("vnuma vnode %zu vcpus '%s' t=
oo long for destination"),
+ vnodeCnt, data);
+ goto cleanup;
+ }
+
+ if ((virBitmapParse(vtoken, &cpumask, VIR_DOMAIN_C=
PUMASK_LEN) < 0) ||
+ (virDomainNumaSetNodeCpumask(numa, vnodeCnt, c=
pumask) =3D=3D NULL))
+ goto cleanup;
+
+ vcpus +=3D virBitmapCountBits(cpumask);
+
+ } else if (STRPREFIX(str, "vdistances")) {
+ size_t i, ndistances;
+ unsigned int value;
+
+ len =3D strlen(data);
+ if (!virStrncpy(vtoken, data,
+ len, sizeof(vtoken))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("vnuma vnode %zu vdistances '=
%s' too long for destination"),
+ vnodeCnt, data);
+ goto cleanup;
+ }
+
+ if (VIR_STRDUP(tmp, vtoken) < 0)
+ goto cleanup;
+
+ if (!(token =3D virStringSplitCount(tmp, ",", 0, &=
ndistances)))
+ goto cleanup;
+
+ if (ndistances !=3D nr_nodes) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("vnuma pnode %d configured '%s' (=
count %zu) doesn't fit the number of specified vnodes %zu"),
+ pnode, str, ndistances, nr_nodes);
+ goto cleanup;
+ }
+
+ if (virDomainNumaSetNodeDistanceCount(numa, vnodeC=
nt, ndistances) !=3D ndistances)
+ goto cleanup;
+
+ for (i =3D 0; i < ndistances; i++) {
+ if ((virStrToLong_ui(token[i], NULL, 10, &valu=
e) < 0) ||
+ (virDomainNumaSetNodeDistance(numa, vnodeC=
nt, i, value) !=3D value))
+ goto cleanup;
+ }
+
+ } else {
+ virReportError(VIR_ERR_CONF_SYNTAX,
+ _("vnuma vnode %zu invalid token '%=
s'"),
+ vnodeCnt, str);
+ goto cleanup;
+ }
+ }
+ vnode =3D vnode->next;
+ }
+ }
+
+ if ((pnode < 0) ||
+ (cpumask =3D=3D NULL) ||
+ (kbsize =3D=3D 0)) {
+ virReportError(VIR_ERR_CONF_SYNTAX,
+ _("vnuma vnode %zu incomplete token. Missing%s%=
s%s"),
+ vnodeCnt,
+ (pnode < 0) ? " \'pnode\'":"",
+ (cpumask =3D=3D NULL) ? " \'vcpus\'":"",
+ (kbsize =3D=3D 0) ? " \'size\'":"");
+ goto cleanup;
+ }
+
+ list =3D list->next;
+ vnodeCnt++;
+ }
+
+ if (def->maxvcpus =3D=3D 0)
+ def->maxvcpus =3D vcpus;
+
+ if (def->maxvcpus < vcpus) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("vnuma requested vcpus %zu fails available maxvcp=
us %zu"),
+ vcpus, def->maxvcpus);
+ goto cleanup;
+ }
+
+ cpu->type =3D VIR_CPU_TYPE_GUEST;
+ def->cpu =3D cpu;
+
+ ret =3D 0;
+
+ cleanup:
+ if (ret)
+ VIR_FREE(cpu);
+ virStringListFree(token);
+ VIR_FREE(tmp);
+
+ return ret;
+}
+#endif
=20
static int
xenParseXLDiskSrc(virDomainDiskDefPtr disk, char *srcstr)
@@ -863,6 +1062,11 @@ xenParseXL(virConfPtr conf,
if (xenParseXLOS(conf, def, caps) < 0)
goto cleanup;
=20
+#ifdef LIBXL_HAVE_VNUMA
+ if (xenParseXLVnuma(conf, def) < 0)
+ goto cleanup;
+#endif
+
if (xenParseXLDisk(conf, def) < 0)
goto cleanup;
=20
@@ -1005,6 +1209,130 @@ xenFormatXLOS(virConfPtr conf, virDomainDefPtr def)
return 0;
}
=20
+#ifdef LIBXL_HAVE_VNUMA
+static int
+xenFormatXLVnode(virConfValuePtr list, virBufferPtr buf)
+{
+ int ret =3D -1;
+ virConfValuePtr numaPnode, tmp;
+
+ if (virBufferCheckError(buf) < 0)
+ goto cleanup;
+
+ if (VIR_ALLOC(numaPnode) < 0)
+ goto cleanup;
+
+ /* Place VNODE directive */
+ numaPnode->type =3D VIR_CONF_STRING;
+ numaPnode->str =3D virBufferContentAndReset(buf);
+
+ tmp =3D list->list;
+ while (tmp && tmp->next)
+ tmp =3D tmp->next;
+ if (tmp)
+ tmp->next =3D numaPnode;
+ else
+ list->list =3D numaPnode;
+ ret =3D 0;
+
+ cleanup:
+ virBufferFreeAndReset(buf);
+ return ret;
+}
+
+static int ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
+xenFormatXLVnuma(virConfValuePtr list,
+ virDomainNumaPtr numa, size_t node, size_t nr_nodes)
+{
+ int ret =3D -1;
+ size_t i;
+
+ virBuffer buf =3D VIR_BUFFER_INITIALIZER;
+ virConfValuePtr numaVnode, tmp;
+
+ size_t nodeSize =3D virDomainNumaGetNodeMemorySize(numa, node) / 1024;
+ char *nodeVcpus =3D virBitmapFormat(virDomainNumaGetNodeCpumask(numa, =
node));
+
+ if (VIR_ALLOC(numaVnode) < 0)
+ goto cleanup;
+
+ numaVnode->type =3D VIR_CONF_LIST;
+ numaVnode->list =3D NULL;
+
+ /* pnode */
+ virBufferAsprintf(&buf, "pnode=3D%ld", node);
+ xenFormatXLVnode(numaVnode, &buf);
+
+ /* size */
+ virBufferAsprintf(&buf, "size=3D%ld", nodeSize);
+ xenFormatXLVnode(numaVnode, &buf);
+
+ /* vcpus */
+ virBufferAsprintf(&buf, "vcpus=3D%s", nodeVcpus);
+ xenFormatXLVnode(numaVnode, &buf);
+
+ /* distances */
+ virBufferAddLit(&buf, "vdistances=3D");
+ for (i =3D 0; i < nr_nodes; i++) {
+ virBufferAsprintf(&buf, "%zu",
+ virDomainNumaGetNodeDistance(numa, node, i));
+ if ((nr_nodes - i) > 1)
+ virBufferAddLit(&buf, ",");
+ }
+ xenFormatXLVnode(numaVnode, &buf);
+
+ tmp =3D list->list;
+ while (tmp && tmp->next)
+ tmp =3D tmp->next;
+ if (tmp)
+ tmp->next =3D numaVnode;
+ else
+ list->list =3D numaVnode;
+ ret =3D 0;
+
+ cleanup:
+ VIR_FREE(nodeVcpus);
+ return ret;
+}
+
+static int
+xenFormatXLDomainVnuma(virConfPtr conf, virDomainDefPtr def)
+{
+ virDomainNumaPtr numa =3D def->numa;
+ virConfValuePtr vnumaVal;
+ size_t i;
+ size_t nr_nodes;
+
+ if (numa =3D=3D NULL)
+ return -1;
+
+ if (VIR_ALLOC(vnumaVal) < 0)
+ return -1;
+
+ vnumaVal->type =3D VIR_CONF_LIST;
+ vnumaVal->list =3D NULL;
+
+ nr_nodes =3D virDomainNumaGetNodeCount(numa);
+ for (i =3D 0; i < nr_nodes; i++) {
+ if (xenFormatXLVnuma(vnumaVal, numa, i, nr_nodes) < 0)
+ goto cleanup;
+ }
+
+ if (vnumaVal->list !=3D NULL) {
+ int ret =3D virConfSetValue(conf, "vnuma", vnumaVal);
+ vnumaVal =3D NULL;
+ if (ret < 0)
+ return -1;
+ }
+ VIR_FREE(vnumaVal);
+
+ return 0;
+
+ cleanup:
+ virConfFreeValue(vnumaVal);
+ return -1;
+}
+#endif
=20
static char *
xenFormatXLDiskSrcNet(virStorageSourcePtr src)
@@ -1642,6 +1970,11 @@ xenFormatXL(virDomainDefPtr def, virConnectPtr conn)
if (xenFormatXLOS(conf, def) < 0)
goto cleanup;
=20
+#ifdef LIBXL_HAVE_VNUMA
+ if (xenFormatXLDomainVnuma(conf, def) < 0)
+ goto cleanup;
+#endif
+
if (xenFormatXLDomainDisks(conf, def) < 0)
goto cleanup;
=20
--=20
2.13.6
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Thu May 2 14:37:37 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1507837001410106.56759185277497;
Thu, 12 Oct 2017 12:36:41 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com
[10.5.11.11])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 337F07AEBD;
Thu, 12 Oct 2017 19:36:40 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 0D14318986;
Thu, 12 Oct 2017 19:36:40 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id C338E18355DC;
Thu, 12 Oct 2017 19:36:39 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com
[10.5.11.16])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id v9CJWFn9006064 for ;
Thu, 12 Oct 2017 15:32:15 -0400
Received: by smtp.corp.redhat.com (Postfix)
id B929D17517; Thu, 12 Oct 2017 19:32:15 +0000 (UTC)
Received: from mx1.redhat.com (ext-mx09.extmail.prod.ext.phx2.redhat.com
[10.5.110.38])
by smtp.corp.redhat.com (Postfix) with ESMTPS id B496B17129
for ; Thu, 12 Oct 2017 19:32:15 +0000 (UTC)
Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 8A52ACAA77
for ; Thu, 12 Oct 2017 19:32:13 +0000 (UTC)
Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234])
by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with
ESMTP id v9CJWCPK019036
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Thu, 12 Oct 2017 19:32:12 GMT
Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235])
by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id v9CJWCOM027358
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256
verify=OK); Thu, 12 Oct 2017 19:32:12 GMT
Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8])
by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id v9CJWC1l012029;
Thu, 12 Oct 2017 19:32:12 GMT
Received: from nina.dynamic.ziggo.nl (/10.175.236.97)
by default (Oracle Beehive Gateway v4.0)
with ESMTP ; Thu, 12 Oct 2017 12:32:11 -0700
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 337F07AEBD
Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com;
dmarc=fail (p=none dis=none) header.from=oracle.com
Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com;
spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 337F07AEBD
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8A52ACAA77
Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com;
dmarc=pass (p=none dis=none) header.from=oracle.com
Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com;
spf=pass smtp.mailfrom=wim.ten.have@oracle.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 8A52ACAA77
From: Wim Ten Have
To: Libvirt Development List
Date: Thu, 12 Oct 2017 21:31:56 +0200
Message-Id: <20171012193157.2711-4-wim.ten.have@oracle.com>
In-Reply-To: <20171012193157.2711-1-wim.ten.have@oracle.com>
References: <20171012193157.2711-1-wim.ten.have@oracle.com>
X-Source-IP: aserv0022.oracle.com [141.146.126.234]
X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 205
matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com
[10.5.110.38]); Thu, 12 Oct 2017 19:32:13 +0000 (UTC)
X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com
[10.5.110.38]);
Thu, 12 Oct 2017 19:32:13 +0000 (UTC) for IP:'156.151.31.81'
DOMAIN:'userp1040.oracle.com' HELO:'userp1040.oracle.com'
FROM:'wim.ten.have@oracle.com' RCPT:''
X-RedHat-Spam-Score: -105.101 (RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H2,
RP_MATCHES_RCVD, SPF_PASS, UNPARSEABLE_RELAY,
USER_IN_WHITELIST) 156.151.31.81 userp1040.oracle.com 156.151.31.81
userp1040.oracle.com
X-Scanned-By: MIMEDefang 2.78 on 10.5.110.38
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16
X-loop: libvir-list@redhat.com
Cc: Wim ten Have
Subject: [libvirt] [PATCH v5 3/4] libxl: vnuma support
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]);
Thu, 12 Oct 2017 19:36:40 +0000 (UTC)
X-ZohoMail: RSF_0 Z_629925259 SPT_0
Content-Type: text/plain; charset="utf-8"
From: Wim ten Have
This patch generates a NUMA distance-aware libxl description from the
information extracted from a NUMA distance-aware libvirt XML file.
By default, if no NUMA node distance information is supplied in the
libvirt XML file, this patch uses the distances 10 for local and 20
for remote nodes/sockets."
Signed-off-by: Wim ten Have
---
Changes on v1:
- Fix function calling (coding) standards.
- Use virReportError(...) under all failing circumstances.
- Reduce redundant (format->parse) code sorting bitmaps.
- Avoid non GNU shorthand notations, difficult code practice.
Changes on v2:
- Have autonomous defaults applied from virDomainNumaGetNodeDistance.
- Automatically make Xen driver simulate vnuma pnodes on non NUMA h/w.
- Compute 'memory unit=3D' making it the sum of all node memory.
Changes on v4:
- Escape virDomainNumaGetNodeCount() if effective.
---
src/libxl/libxl_conf.c | 121 +++++++++++++++++++++++++++++++++++++++++++=
++++
src/libxl/libxl_driver.c | 3 +-
2 files changed, 123 insertions(+), 1 deletion(-)
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 34233a955..adac6c19c 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -374,6 +374,7 @@ libxlMakeDomBuildInfo(virDomainDefPtr def,
def->features[VIR_DOMAIN_FEATURE_APIC] =3D=3D
VIR_TRISTATE_SWITCH_ON);
libxl_defbool_set(&b_info->u.hvm.acpi,
+ virDomainNumaGetNodeCount(def->numa) > 0 ||
def->features[VIR_DOMAIN_FEATURE_ACPI] =3D=3D
VIR_TRISTATE_SWITCH_ON);
=20
@@ -618,6 +619,121 @@ libxlMakeDomBuildInfo(virDomainDefPtr def,
return 0;
}
=20
+#ifdef LIBXL_HAVE_VNUMA
+static int
+libxlMakeVnumaList(virDomainDefPtr def,
+ libxl_ctx *ctx,
+ libxl_domain_config *d_config)
+{
+ int ret =3D -1;
+ size_t i, j;
+ size_t nr_nodes;
+ size_t num_vnuma;
+ bool simulate =3D false;
+ virBitmapPtr bitmap =3D NULL;
+ virDomainNumaPtr numa =3D def->numa;
+ libxl_domain_build_info *b_info =3D &d_config->b_info;
+ libxl_physinfo physinfo;
+ libxl_vnode_info *vnuma_nodes =3D NULL;
+
+ if (!numa)
+ return 0;
+
+ num_vnuma =3D virDomainNumaGetNodeCount(numa);
+ if (!num_vnuma)
+ return 0;
+
+ libxl_physinfo_init(&physinfo);
+ if (libxl_get_physinfo(ctx, &physinfo) < 0) {
+ libxl_physinfo_dispose(&physinfo);
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("libxl_get_physinfo_info failed"));
+ return -1;
+ }
+ nr_nodes =3D physinfo.nr_nodes;
+ libxl_physinfo_dispose(&physinfo);
+
+ if (num_vnuma > nr_nodes) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Number of configured numa cells %zu exceeds the =
physical available nodes %zu, guest simulates numa"),
+ num_vnuma, nr_nodes);
+ simulate =3D true;
+ }
+
+ /*
+ * allocate the vnuma_nodes for assignment under b_info.
+ */
+ if (VIR_ALLOC_N(vnuma_nodes, num_vnuma) < 0)
+ return -1;
+
+ /*
+ * parse the vnuma vnodes data.
+ */
+ for (i =3D 0; i < num_vnuma; i++) {
+ int cpu;
+ libxl_bitmap vcpu_bitmap;
+ libxl_vnode_info *p =3D &vnuma_nodes[i];
+
+ libxl_vnode_info_init(p);
+
+ /* pnode */
+ p->pnode =3D simulate ? 0 : i;
+
+ /* memory size */
+ p->memkb =3D virDomainNumaGetNodeMemorySize(numa, i);
+
+ /* vcpus */
+ bitmap =3D virDomainNumaGetNodeCpumask(numa, i);
+ if (bitmap =3D=3D NULL) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("vnuma sibling %zu missing vcpus set"), i);
+ goto cleanup;
+ }
+
+ if ((cpu =3D virBitmapNextSetBit(bitmap, -1)) < 0)
+ goto cleanup;
+
+ libxl_bitmap_init(&vcpu_bitmap);
+ if (libxl_cpu_bitmap_alloc(ctx, &vcpu_bitmap, b_info->max_vcpus)) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ do {
+ libxl_bitmap_set(&vcpu_bitmap, cpu);
+ } while ((cpu =3D virBitmapNextSetBit(bitmap, cpu)) >=3D 0);
+
+ libxl_bitmap_copy_alloc(ctx, &p->vcpus, &vcpu_bitmap);
+ libxl_bitmap_dispose(&vcpu_bitmap);
+
+ /* vdistances */
+ if (VIR_ALLOC_N(p->distances, num_vnuma) < 0)
+ goto cleanup;
+ p->num_distances =3D num_vnuma;
+
+ for (j =3D 0; j < num_vnuma; j++)
+ p->distances[j] =3D virDomainNumaGetNodeDistance(numa, i, j);
+ }
+
+ b_info->vnuma_nodes =3D vnuma_nodes;
+ b_info->num_vnuma_nodes =3D num_vnuma;
+
+ ret =3D 0;
+
+ cleanup:
+ if (ret) {
+ for (i =3D 0; i < num_vnuma; i++) {
+ libxl_vnode_info *p =3D &vnuma_nodes[i];
+
+ VIR_FREE(p->distances);
+ }
+ VIR_FREE(vnuma_nodes);
+ }
+
+ return ret;
+}
+#endif
+
static int
libxlDiskSetDiscard(libxl_device_disk *x_disk, int discard)
{
@@ -2209,6 +2325,11 @@ libxlBuildDomainConfig(virPortAllocatorPtr graphicsp=
orts,
if (libxlMakeDomBuildInfo(def, ctx, caps, d_config) < 0)
return -1;
=20
+#ifdef LIBXL_HAVE_VNUMA
+ if (libxlMakeVnumaList(def, ctx, d_config) < 0)
+ return -1;
+#endif
+
if (libxlMakeDiskList(def, d_config) < 0)
return -1;
=20
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 8483d6ecf..656f4a82d 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -2788,7 +2788,8 @@ libxlDomainDefineXMLFlags(virConnectPtr conn, const c=
har *xml, unsigned int flag
virCheckFlags(VIR_DOMAIN_DEFINE_VALIDATE, NULL);
=20
if (flags & VIR_DOMAIN_DEFINE_VALIDATE)
- parse_flags |=3D VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA;
+ parse_flags |=3D (VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA |
+ VIR_DOMAIN_DEF_PARSE_ABI_UPDATE);
=20
if (!(def =3D virDomainDefParseString(xml, cfg->caps, driver->xmlopt,
NULL, parse_flags)))
--=20
2.13.6
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Thu May 2 14:37:37 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1507836986284991.3096566130032;
Thu, 12 Oct 2017 12:36:26 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com
[10.5.11.13])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id AF7F07F3F8;
Thu, 12 Oct 2017 19:36:24 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 8921460637;
Thu, 12 Oct 2017 19:36:24 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3FA6218355DA;
Thu, 12 Oct 2017 19:36:24 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com
[10.5.11.16])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id v9CJWGJr006076 for ;
Thu, 12 Oct 2017 15:32:16 -0400
Received: by smtp.corp.redhat.com (Postfix)
id 7E7725C550; Thu, 12 Oct 2017 19:32:16 +0000 (UTC)
Received: from mx1.redhat.com (ext-mx05.extmail.prod.ext.phx2.redhat.com
[10.5.110.29])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 796A55C1A3
for ; Thu, 12 Oct 2017 19:32:16 +0000 (UTC)
Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id A2EA915565
for ; Thu, 12 Oct 2017 19:32:14 +0000 (UTC)
Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74])
by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with
ESMTP id v9CJWDpN011892
(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
Thu, 12 Oct 2017 19:32:13 GMT
Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72])
by userv0022.oracle.com (8.14.4/8.14.4) with ESMTP id v9CJWD7Z028350
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256
verify=OK); Thu, 12 Oct 2017 19:32:13 GMT
Received: from abhmp0002.oracle.com (abhmp0002.oracle.com [141.146.116.8])
by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id v9CJWD7a001319;
Thu, 12 Oct 2017 19:32:13 GMT
Received: from nina.dynamic.ziggo.nl (/10.175.236.97)
by default (Oracle Beehive Gateway v4.0)
with ESMTP ; Thu, 12 Oct 2017 12:32:12 -0700
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com AF7F07F3F8
Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com;
dmarc=fail (p=none dis=none) header.from=oracle.com
Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com;
spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com AF7F07F3F8
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A2EA915565
Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com;
dmarc=pass (p=none dis=none) header.from=oracle.com
Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com;
spf=pass smtp.mailfrom=wim.ten.have@oracle.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com A2EA915565
From: Wim Ten Have
To: Libvirt Development List
Date: Thu, 12 Oct 2017 21:31:57 +0200
Message-Id: <20171012193157.2711-5-wim.ten.have@oracle.com>
In-Reply-To: <20171012193157.2711-1-wim.ten.have@oracle.com>
References: <20171012193157.2711-1-wim.ten.have@oracle.com>
X-Source-IP: userv0022.oracle.com [156.151.31.74]
X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 205
matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com
[10.5.110.29]); Thu, 12 Oct 2017 19:32:15 +0000 (UTC)
X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com
[10.5.110.29]);
Thu, 12 Oct 2017 19:32:15 +0000 (UTC) for IP:'141.146.126.69'
DOMAIN:'aserp1040.oracle.com' HELO:'aserp1040.oracle.com'
FROM:'wim.ten.have@oracle.com' RCPT:''
X-RedHat-Spam-Score: -102.321 (RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H4,
RCVD_IN_MSPIKE_WL, RP_MATCHES_RCVD, SPF_PASS, UNPARSEABLE_RELAY,
USER_IN_WHITELIST) 141.146.126.69 aserp1040.oracle.com 141.146.126.69
aserp1040.oracle.com
X-Scanned-By: MIMEDefang 2.78 on 10.5.110.29
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16
X-loop: libvir-list@redhat.com
Cc: Wim ten Have
Subject: [libvirt] [PATCH v5 4/4] xlconfigtest: add tests for numa cell
sibling distances
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]);
Thu, 12 Oct 2017 19:36:25 +0000 (UTC)
X-ZohoMail: RSF_0 Z_629925259 SPT_0
Content-Type: text/plain; charset="utf-8"
From: Wim ten Have
Test a bidirectional xen-xl domxml to and from native for numa
support administration as brought under this patch series.
Signed-off-by: Wim ten Have
Reviewed-by: Jim Fehlig
---
.../test-fullvirt-vnuma-autocomplete.cfg | 26 +++++++
.../test-fullvirt-vnuma-autocomplete.xml | 85 ++++++++++++++++++=
++++
.../test-fullvirt-vnuma-nodistances.cfg | 26 +++++++
.../test-fullvirt-vnuma-nodistances.xml | 53 ++++++++++++++
.../test-fullvirt-vnuma-partialdist.cfg | 26 +++++++
.../test-fullvirt-vnuma-partialdist.xml | 60 +++++++++++++++
tests/xlconfigdata/test-fullvirt-vnuma.cfg | 26 +++++++
tests/xlconfigdata/test-fullvirt-vnuma.xml | 81 ++++++++++++++++++=
+++
tests/xlconfigtest.c | 6 ++
9 files changed, 389 insertions(+)
create mode 100644 tests/xlconfigdata/test-fullvirt-vnuma-autocomplete.cfg
create mode 100644 tests/xlconfigdata/test-fullvirt-vnuma-autocomplete.xml
create mode 100644 tests/xlconfigdata/test-fullvirt-vnuma-nodistances.cfg
create mode 100644 tests/xlconfigdata/test-fullvirt-vnuma-nodistances.xml
create mode 100644 tests/xlconfigdata/test-fullvirt-vnuma-partialdist.cfg
create mode 100644 tests/xlconfigdata/test-fullvirt-vnuma-partialdist.xml
create mode 100644 tests/xlconfigdata/test-fullvirt-vnuma.cfg
create mode 100644 tests/xlconfigdata/test-fullvirt-vnuma.xml
diff --git a/tests/xlconfigdata/test-fullvirt-vnuma-autocomplete.cfg b/test=
s/xlconfigdata/test-fullvirt-vnuma-autocomplete.cfg
new file mode 100644
index 000000000..edba69a17
--- /dev/null
+++ b/tests/xlconfigdata/test-fullvirt-vnuma-autocomplete.cfg
@@ -0,0 +1,26 @@
+name =3D "XenGuest2"
+uuid =3D "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+maxmem =3D 8192
+memory =3D 8192
+vcpus =3D 12
+pae =3D 1
+acpi =3D 1
+apic =3D 1
+viridian =3D 0
+rtc_timeoffset =3D 0
+localtime =3D 0
+on_poweroff =3D "destroy"
+on_reboot =3D "restart"
+on_crash =3D "restart"
+device_model =3D "/usr/lib/xen/bin/qemu-system-i386"
+sdl =3D 0
+vnc =3D 1
+vncunused =3D 1
+vnclisten =3D "127.0.0.1"
+vif =3D [ "mac=3D00:16:3e:66:92:9c,bridge=3Dxenbr1,script=3Dvif-bridge,mod=
el=3De1000" ]
+parallel =3D "none"
+serial =3D "none"
+builder =3D "hvm"
+boot =3D "d"
+vnuma =3D [ [ "pnode=3D0", "size=3D2048", "vcpus=3D0,11", "vdistances=3D10=
,21,31,41,51,61" ], [ "pnode=3D1", "size=3D2048", "vcpus=3D1,10", "vdistanc=
es=3D21,10,21,31,41,51" ], [ "pnode=3D2", "size=3D2048", "vcpus=3D2,9", "vd=
istances=3D31,21,10,21,31,41" ], [ "pnode=3D3", "size=3D2048", "vcpus=3D3,8=
", "vdistances=3D41,31,21,10,21,31" ], [ "pnode=3D4", "size=3D2048", "vcpus=
=3D4,7", "vdistances=3D51,41,31,21,10,21" ], [ "pnode=3D5", "size=3D2048", =
"vcpus=3D5-6", "vdistances=3D61,51,41,31,21,10" ] ]
+disk =3D [ "format=3Draw,vdev=3Dhda,access=3Drw,backendtype=3Dphy,target=
=3D/dev/HostVG/XenGuest2" ]
diff --git a/tests/xlconfigdata/test-fullvirt-vnuma-autocomplete.xml b/test=
s/xlconfigdata/test-fullvirt-vnuma-autocomplete.xml
new file mode 100644
index 000000000..e3639eb04
--- /dev/null
+++ b/tests/xlconfigdata/test-fullvirt-vnuma-autocomplete.xml
@@ -0,0 +1,85 @@
+
+ XenGuest2
+ c7a5fdb2-cdaf-9455-926a-d65c16db1809
+ 8388608
+ 8388608
+ 12
+
+ hvm
+ /usr/lib/xen/boot/hvmloader
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+ destroy
+ restart
+ restart
+
+ /usr/lib/xen/bin/qemu-system-i386
+
+
+
+
+
+
+
+
+
+
+ |