[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 05/10] spapr: make ibm, max-associativity-domains scale with user
From: |
Daniel Henrique Barboza |
Subject: |
[PATCH 05/10] spapr: make ibm, max-associativity-domains scale with user input |
Date: |
Fri, 14 Aug 2020 17:54:19 -0300 |
The ibm,max-associativity-domains is considering that only a single
associativity domain can exist in the same NUMA level. This is true
today because we do not support any type of NUMA distance user
customization, and all nodes are in the same distance to each other.
To enhance NUMA distance support in the pSeries machine we need to
make this limit flexible. This patch rewrites the max-associativity
logic to consider that multiple associativity domains can co-exist
in the same NUMA level. We're using the legacy_numa() helper to
avoid leaking unneeded guest changes.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
hw/ppc/spapr.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 073a59c47d..b0c4b80a23 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -919,13 +919,20 @@ static void spapr_dt_rtas(SpaprMachineState *spapr, void
*fdt)
cpu_to_be32(SPAPR_MEMORY_BLOCK_SIZE & 0xffffffff),
cpu_to_be32(ms->smp.max_cpus / ms->smp.threads),
};
- uint32_t maxdomain = cpu_to_be32(spapr->extra_numa_nodes > 1 ? 1 : 0);
+
+ /* The maximum domains for a given NUMA level, supposing that every
+ * additional NUMA node belongs to the same domain (aside from the
+ * 4th level, where we must support all available NUMA domains), is
+ * total number of domains - 1. */
+ uint32_t total_nodes_number = ms->numa_state->num_nodes +
+ spapr->extra_numa_nodes;
+ uint32_t maxdomain = cpu_to_be32(total_nodes_number - 1);
uint32_t maxdomains[] = {
cpu_to_be32(4),
maxdomain,
maxdomain,
maxdomain,
- cpu_to_be32(ms->numa_state->num_nodes + spapr->extra_numa_nodes),
+ cpu_to_be32(total_nodes_number),
};
_FDT(rtas = fdt_add_subnode(fdt, 0, "rtas"));
@@ -962,6 +969,13 @@ static void spapr_dt_rtas(SpaprMachineState *spapr, void
*fdt)
qemu_hypertas->str, qemu_hypertas->len));
g_string_free(qemu_hypertas, TRUE);
+ if (spapr_machine_using_legacy_numa(spapr)) {
+ maxdomain = cpu_to_be32(spapr->extra_numa_nodes > 1 ? 1 : 0);
+ maxdomains[1] = maxdomain;
+ maxdomains[2] = maxdomain;
+ maxdomains[3] = maxdomain;
+ }
+
if (smc->pre_5_1_assoc_refpoints) {
nr_refpoints = 2;
}
--
2.26.2
- Re: [PATCH 08/10] spapr: introduce SpaprMachineClass::numa_assoc_domains, (continued)
- [PATCH 03/10] spapr: robustify NVLink2 NUMA node logic, Daniel Henrique Barboza, 2020/08/15
- [PATCH 07/10] spapr: create helper to set ibm,associativity, Daniel Henrique Barboza, 2020/08/15
- [PATCH 04/10] spapr: add spapr_machine_using_legacy_numa() helper, Daniel Henrique Barboza, 2020/08/15
- [PATCH 06/10] spapr: allow 4 NUMA levels in ibm, associativity-reference-points, Daniel Henrique Barboza, 2020/08/15
- [PATCH 10/10] specs/ppc-spapr-numa: update with new NUMA support, Daniel Henrique Barboza, 2020/08/15
- [PATCH 05/10] spapr: make ibm, max-associativity-domains scale with user input,
Daniel Henrique Barboza <=
- [PATCH 02/10] numa: introduce MachineClass::forbid_asymmetrical_numa, Daniel Henrique Barboza, 2020/08/15