Linux CXL
 help / color / mirror / Atom feed
* How to programmatically discover online and offline memory and its latency and bandwidth from user space?
@ 2025-01-08 17:55 Olivi, Matteo
  2025-01-10 17:01 ` Jonathan Cameron
  0 siblings, 1 reply; 5+ messages in thread
From: Olivi, Matteo @ 2025-01-08 17:55 UTC (permalink / raw)
  To: linux-cxl@vger.kernel.org

Hello,
I'm a PhD student working on orchestrator support for memory disaggregation.

I have some questions about how Linux presents CXL memory and its performance
characteristics to user space.

1. What is the simplest way for a user space program (with root privileges) to learn the
latency and bandwidth between each pair of NUMA nodes (even non-CXL ones)? Are
reading the HMAT and shelling out to the cxl cli the only two options? I've read
https://docs.kernel.org/admin-guide/mm/numaperf.html but AFAIU given a memory target
those sysfs files only report the performance from the local initiators. I care about each pair,
not just local ones.

2. Is there a way to get the information question 1 asks for for memory that is physically
connected to the host, but logically isn't? The ACPI spec https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/17_NUMA_Architecture_Platforms/NUMA_Architecture_Platforms.html#system-resource-affinity-table-definition 
states that "The SRAT describes the system locality that all processors and memory
present in a system belong to at system boot. This includes memory that can be hot-added (that
is memory that can be added to the system while it is running, without requiring a reboot)."
I interpret that to mean that if (CXL) memory is physically, but not logically, connected to the host,
the SRAT will still describe the corresponding NUMA node. But what about the HMAT? The ACPI spec
https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/17_NUMA_Architecture_Platforms/NUMA_Architecture_Platforms.html#heterogeneous-memory-attributes-information
states that  "The static HMAT table provides the boot time description of the memory latency and bandwidth
among all memory access Initiator and memory Target System Localities. For hot-added devices and
dynamic reconfiguration of the system localities, the _HMA object must be used for runtime update."
but it's unclear to me if that applies only to physically hot-plugged memory or to logically hot-plugged
memory as well.

3. Is there a recommended way for a user space program to tell CXL NUMA nodes from local NUMA nodes
(both online and offline ones)? One hack would be to check whether the NUMA node has CPUs or not.
Another option would be shelling out to the cxl-cli. 

4. Is there a way for a user space program (with root privileges) to learn IDs of CXL NUMA
nodes (both online and offline ones) that are globally unique? What I want is:
a. if two hosts are both connected to the same CXL memory, they should see that memory
with the same ID.
b. two different CXL memory pools will never be seen with the same ID by different hosts.

All my questions talk about NUMA nodes. I understand that Linux has multiple
layers of abstractions to represent memory, and NUMA nodes are one of the highest ones.
If any of the questions above can be answered but at a lower level of abstraction than NUMA
nodes, that's fine as long as there's a way to map the entity in the lower level of abstraction
to the corresponding NUMA node.

Thanks,
Matteo Olivi.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-08-26 17:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-08 17:55 How to programmatically discover online and offline memory and its latency and bandwidth from user space? Olivi, Matteo
2025-01-10 17:01 ` Jonathan Cameron
2025-08-22  2:38   ` Olivi, Matteo
2025-08-26 13:58     ` Jonathan Cameron
2025-08-26 17:31     ` Dave Jiang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox