On Tue, 3 May 2022 22:03:02 +0800 Gavin Shan <gs...@redhat.com> wrote:
> In aarch64_numa_cpu(), the CPU and NUMA association is something > like below. Two threads in the same core/cluster/socket are > associated with two individual NUMA nodes, which is unreal as > Igor Mammedov mentioned. We don't expect the association to break > NUMA-to-socket boundary, which matches with the real world. > > NUMA-node socket cluster core thread > ------------------------------------------ > 0 0 0 0 0 > 1 0 0 0 1 > > This corrects the topology for CPUs and their association with > NUMA nodes. After this patch is applied, the CPU and NUMA > association becomes something like below, which looks real. > Besides, socket/cluster/core/thread IDs are all checked when > the NUMA node IDs are verified. It helps to check if the CPU > topology is properly populated or not. > > NUMA-node socket cluster core thread > ------------------------------------------ > 0 1 0 0 0 > 1 0 0 0 0 I'd place 'socket 1' on node 0, so it wouldn't look odd. But it probably doesn't matter, so Acked-by: Igor Mammedov <imamm...@redhat.com> > Suggested-by: Igor Mammedov <imamm...@redhat.com> > Signed-off-by: Gavin Shan <gs...@redhat.com> > --- > tests/qtest/numa-test.c | 18 ++++++++++++------ > 1 file changed, 12 insertions(+), 6 deletions(-) > > diff --git a/tests/qtest/numa-test.c b/tests/qtest/numa-test.c > index aeda8c774c..32e35daaae 100644 > --- a/tests/qtest/numa-test.c > +++ b/tests/qtest/numa-test.c > @@ -224,17 +224,17 @@ static void aarch64_numa_cpu(const void *data) > g_autofree char *cli = NULL; > > cli = make_cli(data, "-machine " > - "smp.cpus=2,smp.sockets=1,smp.clusters=1,smp.cores=1,smp.threads=2 " > + "smp.cpus=2,smp.sockets=2,smp.clusters=1,smp.cores=1,smp.threads=1 " > "-numa node,nodeid=0,memdev=ram -numa node,nodeid=1 " > - "-numa cpu,node-id=1,thread-id=0 " > - "-numa cpu,node-id=0,thread-id=1"); > + "-numa cpu,node-id=0,socket-id=1,cluster-id=0,core-id=0,thread-id=0 " > + "-numa > cpu,node-id=1,socket-id=0,cluster-id=0,core-id=0,thread-id=0"); > qts = qtest_init(cli); > cpus = get_cpus(qts, &resp); > g_assert(cpus); > > while ((e = qlist_pop(cpus))) { > QDict *cpu, *props; > - int64_t thread, node; > + int64_t socket, cluster, core, thread, node; > > cpu = qobject_to(QDict, e); > g_assert(qdict_haskey(cpu, "props")); > @@ -242,12 +242,18 @@ static void aarch64_numa_cpu(const void *data) > > g_assert(qdict_haskey(props, "node-id")); > node = qdict_get_int(props, "node-id"); > + g_assert(qdict_haskey(props, "socket-id")); > + socket = qdict_get_int(props, "socket-id"); > + g_assert(qdict_haskey(props, "cluster-id")); > + cluster = qdict_get_int(props, "cluster-id"); > + g_assert(qdict_haskey(props, "core-id")); > + core = qdict_get_int(props, "core-id"); > g_assert(qdict_haskey(props, "thread-id")); > thread = qdict_get_int(props, "thread-id"); > > - if (thread == 0) { > + if (socket == 0 && cluster == 0 && core == 0 && thread == 0) { > g_assert_cmpint(node, ==, 1); > - } else if (thread == 1) { > + } else if (socket == 1 && cluster == 0 && core == 0 && thread == 0) { > g_assert_cmpint(node, ==, 0); > } else { > g_assert(false);