From: Daniel Henrique Barboza <danielhb413@gmail.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
david@gibson.dropbear.id.au
Subject: Re: [PATCH v7 7/7] spapr_numa.c: handle auto NUMA node with no distance info
Date: Fri, 17 Sep 2021 18:18:32 -0300 [thread overview]
Message-ID: <81d53dc4-d69b-6931-9cda-b07598df2a19@gmail.com> (raw)
In-Reply-To: <20210917102552.7ce1cbcb@redhat.com>
On 9/17/21 05:25, Igor Mammedov wrote:
> On Wed, 15 Sep 2021 22:30:04 -0300
> Daniel Henrique Barboza <danielhb413@gmail.com> wrote:
>
>> numa_complete_configuration() in hw/core/numa.c always adds a NUMA node
>> for the pSeries machine if none was specified, but without node distance
>> information for the single node created.
>
> distance is optional feature, hence generic auto create magic doesn't
> do anything with it (it does bare minimum for memhotplug to work).
> I'd like to drop auto-generated node altogether and ask user to explicitly
> provide needed -numa options (now with deprecation it's possible) if it's required.
This means that there's a need to handle the case of local distance for a
single NUMA node. Thanks for confirming that.
>
>> This added node is also not
>> accounted for in numa_state->num_nodes, which returns zero.
>
> that's probably a bug, parse_numa_node() should always increments on success,
> can you check why it doesn't happen in your case?
After checking the problem further I realized that this isn't true.
numa_state->num_nodes is correctly reporting size = 1 in this case as
well.
The problem is just the absence of node distance information for the
auto-generated NUMA node. I'll fix both the code and commit message
in the next version.
Thanks,
Daniel
>
>> NUMA FORM1 affinity code didn't rely on numa_state information to do its
>> job, but FORM2 does. As is now, this is the result of a pSeries guest
>> with NUMA FORM2 affinity when no NUMA nodes is specified:
>>
>> $ numactl -H available: 1 nodes (0) node 0 cpus: 0 node 0 size: 16222 MB
>> node 0 free: 15681 MB No distance information available.
>>
>> This can be amended in spapr_numa_FORM2_write_rtas_tables(). We're
>> always expecting at least one NUMA node, and we're going to enforce that
>> the local distance (the distance to the node to itself) is always 10.
>> This allows for the proper creation of the NUMA distance tables, fixing
>> the output of 'numactl -H' in the guest:
>>
>> $ numactl -H available: 1 nodes (0) node 0 cpus: 0 node 0 size: 16222 MB
>> node 0 free: 15685 MB node distances: node 0
>> 0: 10
>>
>> CC: Igor Mammedov <imammedo@redhat.com>
>> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
>> ---
>>
>> Igor,
>>
>> CCing you as a FYI. I wasn't sure whether there is a reason for
>> numa_complete_configuration() not adding distance info an update 'num_nodes'
>> for the auto-generated NUMA node, I decided to handle this case in
>> pseries side instead.
>>
>>
>>
>> hw/ppc/spapr_numa.c | 13 ++++++++++++-
>> 1 file changed, 12 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/ppc/spapr_numa.c b/hw/ppc/spapr_numa.c
>> index 659513b405..d8caf5f6bd 100644
>> --- a/hw/ppc/spapr_numa.c
>> +++ b/hw/ppc/spapr_numa.c
>> @@ -499,7 +499,7 @@ static void spapr_numa_FORM2_write_rtas_tables(SpaprMachineState *spapr,
>> {
>> MachineState *ms = MACHINE(spapr);
>> NodeInfo *numa_info = ms->numa_state->nodes;
>> - int nb_numa_nodes = ms->numa_state->num_nodes;
>> + int nb_numa_nodes = ms->numa_state->num_nodes ?: 1;
>> int distance_table_entries = nb_numa_nodes * nb_numa_nodes;
>> g_autofree uint32_t *lookup_index_table = NULL;
>> g_autofree uint32_t *distance_table = NULL;
>> @@ -539,6 +539,17 @@ static void spapr_numa_FORM2_write_rtas_tables(SpaprMachineState *spapr,
>>
>> for (src = 0; src < nb_numa_nodes; src++) {
>> for (dst = 0; dst < nb_numa_nodes; dst++) {
>> + /*
>> + * We need to be explicit with the local distance
>> + * value to cover the case where the user didn't added any
>> + * NUMA nodes, but QEMU adds the default NUMA node without
>> + * adding the numa_info to retrieve the info from.
>> + */
>> + if (src == dst) {
>> + node_distances[i++] = 10;
>> + continue;
>> + }
>> +
>> node_distances[i++] = numa_info[src].distance[dst];
>> }
>> }
>
prev parent reply other threads:[~2021-09-17 21:19 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-16 1:29 [PATCH v7 0/7] pSeries FORM2 affinity support Daniel Henrique Barboza
2021-09-16 1:29 ` [PATCH v7 1/7] spapr_numa.c: split FORM1 code into helpers Daniel Henrique Barboza
2021-09-16 1:29 ` [PATCH v7 2/7] spapr_numa.c: scrap 'legacy_numa' concept Daniel Henrique Barboza
2021-09-16 1:30 ` [PATCH v7 3/7] spapr_numa.c: parametrize FORM1 macros Daniel Henrique Barboza
2021-09-16 1:30 ` [PATCH v7 4/7] spapr_numa.c: rename numa_assoc_array to FORM1_assoc_array Daniel Henrique Barboza
2021-09-16 1:30 ` [PATCH v7 5/7] spapr: move FORM1 verifications to post CAS Daniel Henrique Barboza
2021-09-16 1:30 ` [PATCH v7 6/7] spapr_numa.c: FORM2 NUMA affinity support Daniel Henrique Barboza
2021-09-16 1:30 ` [PATCH v7 7/7] spapr_numa.c: handle auto NUMA node with no distance info Daniel Henrique Barboza
2021-09-17 8:25 ` Igor Mammedov
2021-09-17 21:18 ` Daniel Henrique Barboza [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=81d53dc4-d69b-6931-9cda-b07598df2a19@gmail.com \
--to=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=groug@kaod.org \
--cc=imammedo@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).