Re: [RFC PATCH 8/8] powerpc/papr_scm: Use FORM2 associativity details
From: David Gibson <hidden>
Date: 2021-06-15 06:35:38
On Tue, Jun 15, 2021 at 11:27:50AM +0530, Aneesh Kumar K.V wrote:
David Gibson [off-list ref] writes:quoted
On Mon, Jun 14, 2021 at 10:10:03PM +0530, Aneesh Kumar K.V wrote:quoted
FORM2 introduce a concept of secondary domain which is identical to the conceept of FORM1 primary domain. Use secondary domain as the numa node when using persistent memory device. For DAX kmem use the logical domain id introduced in FORM2. This new numa node Signed-off-by: Aneesh Kumar K.V <redacted> --- arch/powerpc/mm/numa.c | 28 +++++++++++++++++++++++ arch/powerpc/platforms/pseries/papr_scm.c | 26 +++++++++++++-------- arch/powerpc/platforms/pseries/pseries.h | 1 + 3 files changed, 45 insertions(+), 10 deletions(-)diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 86cd2af014f7..b9ac6d02e944 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c@@ -265,6 +265,34 @@ static int associativity_to_nid(const __be32 *associativity) return nid; } +int get_primary_and_secondary_domain(struct device_node *node, int *primary, int *secondary) +{ + int secondary_index; + const __be32 *associativity; + + if (!numa_enabled) { + *primary = NUMA_NO_NODE; + *secondary = NUMA_NO_NODE; + return 0; + } + + associativity = of_get_associativity(node); + if (!associativity) + return -ENODEV; + + if (of_read_number(associativity, 1) >= primary_domain_index) { + *primary = of_read_number(&associativity[primary_domain_index], 1); + secondary_index = of_read_number(&distance_ref_points[1], 1);Secondary ID is always the second reference point, but primary depends on the length of resources? That seems very weird.primary_domain_index is distance_ref_point[0]. With Form2 we would find both primary and secondary domain ID same for all resources other than persistent memory device. The usage w.r.t. persistent memory is explained in patch 7.
Right, I misunderstood
With Form2 the primary domainID and secondary domainID are used to identify the NUMA nodes the kernel should use when using persistent memory devices.
This seems kind of bogus. With Form1, the primary/secondary ID are a sort of heirarchy of distance (things with same primary ID are very close, things with same secondary are kinda-close, etc.). With Form2, it's referring to their effective node for different purposes. Using the same terms for different meanings seems unnecessarily confusing.
Persistent memory devices can also be used as regular memory using DAX KMEM driver and primary domainID indicates the numa node number OS should use when using these devices as regular memory. Secondary domainID is the numa node number that should be used when using this device as persistent memory.
It's weird to me that you'd want to consider them in different nodes for those different purposes.
In the later case, we are interested in the locality of the device to an established numa node. In the above example, if the last row represents a persistent memory device/resource, NUMA node number 40 will be used when using the device as regular memory and NUMA node number 0 will be the device numa node when using it as a persistent memory device.
I don't really get what you mean by "locality of the device to an established numa node". Or at least how that's different from anything else we're handling here. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Attachments
- signature.asc [application/pgp-signature] 833 bytes