From baa40f939ab38d80597651aec82779af25599bb0 Mon Sep 17 00:00:00 2001 From: zhangxinhao Date: Tue, 9 May 2023 23:28:59 +0800 Subject: cpu_topo: support for reporting cluster_id in NUMA topology Support report the die_id in the NUMA topology capabilities. Signed-off-by: zhangxinhao --- docs/schemas/capability.rng | 3 ++ src/conf/capabilities.c | 4 ++- src/conf/capabilities.h | 1 + src/libvirt_linux.syms | 1 + src/util/virhostcpu.c | 22 +++++++++++++ src/util/virhostcpu.h | 1 + .../vircaps2xmldata/vircaps-aarch64-basic.xml | 32 +++++++++---------- .../vircaps-x86_64-basic-dies.xml | 24 +++++++------- .../vircaps2xmldata/vircaps-x86_64-basic.xml | 32 +++++++++---------- .../vircaps2xmldata/vircaps-x86_64-caches.xml | 16 +++++----- .../vircaps-x86_64-resctrl-cdp.xml | 24 +++++++------- .../vircaps-x86_64-resctrl-cmt.xml | 24 +++++++------- .../vircaps-x86_64-resctrl-fake-feature.xml | 24 +++++++------- .../vircaps-x86_64-resctrl-skx-twocaches.xml | 2 +- .../vircaps-x86_64-resctrl-skx.xml | 2 +- .../vircaps-x86_64-resctrl.xml | 24 +++++++------- 16 files changed, 133 insertions(+), 103 deletions(-) diff --git a/docs/schemas/capability.rng b/docs/schemas/capability.rng index 031c55bf20..f5b37d8c18 100644 --- a/docs/schemas/capability.rng +++ b/docs/schemas/capability.rng @@ -268,6 +268,9 @@ + + + diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c index 12c8c3a324..3c3a66a78a 100644 --- a/src/conf/capabilities.c +++ b/src/conf/capabilities.c @@ -874,9 +874,10 @@ virCapabilitiesHostNUMAFormat(virCapsHostNUMAPtr caps, return -1; virBufferAsprintf(buf, - " socket_id='%d' die_id='%d' core_id='%d' siblings='%s'", + " socket_id='%d' die_id='%d' cluster_id='%d' core_id='%d' siblings='%s'", cell->cpus[j].socket_id, cell->cpus[j].die_id, + cell->cpus[j].cluster_id, cell->cpus[j].core_id, siblings); VIR_FREE(siblings); @@ -1465,6 +1466,7 @@ virCapabilitiesFillCPUInfo(int cpu_id G_GNUC_UNUSED, if (virHostCPUGetSocket(cpu_id, &cpu->socket_id) < 0 || virHostCPUGetDie(cpu_id, &cpu->die_id) < 0 || + virHostCPUGetCluster(cpu_id, &cpu->cluster_id) < 0 || virHostCPUGetCore(cpu_id, &cpu->core_id) < 0) return -1; diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h index e2581fac8b..f88bb412b5 100644 --- a/src/conf/capabilities.h +++ b/src/conf/capabilities.h @@ -89,6 +89,7 @@ struct _virCapsHostNUMACellCPU { unsigned int id; unsigned int socket_id; unsigned int die_id; + unsigned int cluster_id; unsigned int core_id; virBitmapPtr siblings; }; diff --git a/src/libvirt_linux.syms b/src/libvirt_linux.syms index 55649ae39c..004cbfee97 100644 --- a/src/libvirt_linux.syms +++ b/src/libvirt_linux.syms @@ -3,6 +3,7 @@ # # util/virhostcpu.h +virHostCPUGetCluster; virHostCPUGetCore; virHostCPUGetDie; virHostCPUGetInfoPopulateLinux; diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c index 8c8fc3a476..d2ac31e784 100644 --- a/src/util/virhostcpu.c +++ b/src/util/virhostcpu.c @@ -240,6 +240,28 @@ virHostCPUGetDie(unsigned int cpu, unsigned int *die) return 0; } +int +virHostCPUGetCluster(unsigned int cpu, unsigned int *cluster) +{ + int cluster_id; + int ret = virFileReadValueInt(&cluster_id, + "%s/cpu/cpu%u/topology/cluster_id", + SYSFS_SYSTEM_PATH, cpu); + if (ret == -1) + return -1; + + /* If the file is not there, it's 0. + * Another alternative is cluster_id set to -1, meaning that + * the arch does not have cluster_id support. Set @cluster to + * 0 in this case too. */ + if (ret == -2 || cluster_id < 0) + cluster_id = 0; + + *cluster = cluster_id; + + return 0; +} + int virHostCPUGetCore(unsigned int cpu, unsigned int *core) { diff --git a/src/util/virhostcpu.h b/src/util/virhostcpu.h index 9be2e51a38..e3a04c2eeb 100644 --- a/src/util/virhostcpu.h +++ b/src/util/virhostcpu.h @@ -66,6 +66,7 @@ int virHostCPUStatsAssign(virNodeCPUStatsPtr param, #ifdef __linux__ int virHostCPUGetSocket(unsigned int cpu, unsigned int *socket); int virHostCPUGetDie(unsigned int cpu, unsigned int *die); +int virHostCPUGetCluster(unsigned int cpu, unsigned int *cluster); int virHostCPUGetCore(unsigned int cpu, unsigned int *core); virBitmapPtr virHostCPUGetSiblingsList(unsigned int cpu); diff --git a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml index 0a04052c40..5533ae0586 100644 --- a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml +++ b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml @@ -16,10 +16,10 @@ 4096 6144 - - - - + + + + @@ -28,10 +28,10 @@ 6144 8192 - - - - + + + + @@ -40,10 +40,10 @@ 8192 10240 - - - - + + + + @@ -52,10 +52,10 @@ 10240 12288 - - - - + + + + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml index 8a3ca2d13c..c86dc4defc 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml @@ -14,18 +14,18 @@ 4096 6144 - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml index 4da09f889c..9ae155d571 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml @@ -14,10 +14,10 @@ 4096 6144 - - - - + + + + @@ -26,10 +26,10 @@ 6144 8192 - - - - + + + + @@ -38,10 +38,10 @@ 8192 10240 - - - - + + + + @@ -50,10 +50,10 @@ 10240 12288 - - - - + + + + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml index 28f00c0a90..05b33147b7 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml @@ -17,14 +17,14 @@ 4096 6144 - - - - - - - - + + + + + + + + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml index ee26fe9464..167b217d8e 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml @@ -17,12 +17,12 @@ 4096 6144 - - - - - - + + + + + + @@ -31,12 +31,12 @@ 6144 8192 - - - - - - + + + + + + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml index acdd97ec58..311bb58e6a 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml @@ -17,12 +17,12 @@ 4096 6144 - - - - - - + + + + + + @@ -31,12 +31,12 @@ 6144 8192 - - - - - - + + + + + + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml index 5f3678e072..8f64bcad63 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml @@ -17,12 +17,12 @@ 4096 6144 - - - - - - + + + + + + @@ -31,12 +31,12 @@ 6144 8192 - - - - - - + + + + + + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml index 6769bd0591..eb53eb2142 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml @@ -17,7 +17,7 @@ 4096 6144 - + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml index bc52480905..38ea0bdc27 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml @@ -17,7 +17,7 @@ 4096 6144 - + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml index c386edd4b0..ea9e2613d7 100644 --- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml +++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml @@ -17,12 +17,12 @@ 4096 6144 - - - - - - + + + + + + @@ -31,12 +31,12 @@ 6144 8192 - - - - - - + + + + + + -- 2.25.1