mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 06:24:53 +08:00
50468e4313
== Problem == The amount of SGX memory on a system is determined by the BIOS and it varies wildly between systems. It can be as small as dozens of MB's and as large as many GB's on servers. Just like how applications need to know how much regular RAM is available, enclave builders need to know how much SGX memory an enclave can consume. == Solution == Introduce a new sysfs file: /sys/devices/system/node/nodeX/x86/sgx_total_bytes to enumerate the amount of SGX memory available in each NUMA node. This serves the same function for SGX as /proc/meminfo or /sys/devices/system/node/nodeX/meminfo does for normal RAM. 'sgx_total_bytes' is needed today to help drive the SGX selftests. SGX-specific swap code is exercised by creating overcommitted enclaves which are larger than the physical SGX memory on the system. They currently use a CPUID-based approach which can diverge from the actual amount of SGX memory available. 'sgx_total_bytes' ensures that the selftests can work efficiently and do not attempt stupid things like creating a 100,000 MB enclave on a system with 128 MB of SGX memory. == Implementation Details == Introduce CONFIG_HAVE_ARCH_NODE_DEV_GROUP opt-in flag to expose an arch specific attribute group, and add an attribute for the amount of SGX memory in bytes to each NUMA node: == ABI Design Discussion == As opposed to the per-node ABI, a single, global ABI was considered. However, this would prevent enclaves from being able to size themselves so that they fit on a single NUMA node. Essentially, a single value would rule out NUMA optimizations for enclaves. Create a new "x86/" directory inside each "nodeX/" sysfs directory. 'sgx_total_bytes' is expected to be the first of at least a few sgx-specific files to be placed in the new directory. Just scanning /proc/meminfo, these are the no-brainers that we have for RAM, but we need for SGX: MemTotal: xxxx kB // sgx_total_bytes (implemented here) MemFree: yyyy kB // sgx_free_bytes SwapTotal: zzzz kB // sgx_swapped_bytes So, at *least* three. I think we will eventually end up needing something more along the lines of a dozen. A new directory (as opposed to being in the nodeX/ "root") directory avoids cluttering the root with several "sgx_*" files. Place the new file in a new "nodeX/x86/" directory because SGX is highly x86-specific. It is very unlikely that any other architecture (or even non-Intel x86 vendor) will ever implement SGX. Using "sgx/" as opposed to "x86/" was also considered. But, there is a real chance this can get used for other arch-specific purposes. [ dhansen: rewrite changelog ] Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Borislav Petkov <bp@suse.de> Link: https://lkml.kernel.org/r/20211116162116.93081-2-jarkko@kernel.org
185 lines
6.1 KiB
Plaintext
185 lines
6.1 KiB
Plaintext
What: /sys/devices/system/node/possible
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
Nodes that could be possibly become online at some point.
|
|
|
|
What: /sys/devices/system/node/online
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
Nodes that are online.
|
|
|
|
What: /sys/devices/system/node/has_normal_memory
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
Nodes that have regular memory.
|
|
|
|
What: /sys/devices/system/node/has_cpu
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
Nodes that have one or more CPUs.
|
|
|
|
What: /sys/devices/system/node/has_high_memory
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
Nodes that have regular or high memory.
|
|
Depends on CONFIG_HIGHMEM.
|
|
|
|
What: /sys/devices/system/node/nodeX
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
When CONFIG_NUMA is enabled, this is a directory containing
|
|
information on node X such as what CPUs are local to the
|
|
node. Each file is detailed next.
|
|
|
|
What: /sys/devices/system/node/nodeX/cpumap
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
The node's cpumap.
|
|
|
|
What: /sys/devices/system/node/nodeX/cpulist
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
The CPUs associated to the node.
|
|
|
|
What: /sys/devices/system/node/nodeX/meminfo
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
Provides information about the node's distribution and memory
|
|
utilization. Similar to /proc/meminfo, see Documentation/filesystems/proc.rst
|
|
|
|
What: /sys/devices/system/node/nodeX/numastat
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
The node's hit/miss statistics, in units of pages.
|
|
See Documentation/admin-guide/numastat.rst
|
|
|
|
What: /sys/devices/system/node/nodeX/distance
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
Distance between the node and all the other nodes
|
|
in the system.
|
|
|
|
What: /sys/devices/system/node/nodeX/vmstat
|
|
Date: October 2002
|
|
Contact: Linux Memory Management list <linux-mm@kvack.org>
|
|
Description:
|
|
The node's zoned virtual memory statistics.
|
|
This is a superset of numastat.
|
|
|
|
What: /sys/devices/system/node/nodeX/compact
|
|
Date: February 2010
|
|
Contact: Mel Gorman <mel@csn.ul.ie>
|
|
Description:
|
|
When this file is written to, all memory within that node
|
|
will be compacted. When it completes, memory will be freed
|
|
into blocks which have as many contiguous pages as possible
|
|
|
|
What: /sys/devices/system/node/nodeX/hugepages/hugepages-<size>/
|
|
Date: December 2009
|
|
Contact: Lee Schermerhorn <lee.schermerhorn@hp.com>
|
|
Description:
|
|
The node's huge page size control/query attributes.
|
|
See Documentation/admin-guide/mm/hugetlbpage.rst
|
|
|
|
What: /sys/devices/system/node/nodeX/accessY/
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
The node's relationship to other nodes for access class "Y".
|
|
|
|
What: /sys/devices/system/node/nodeX/accessY/initiators/
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
The directory containing symlinks to memory initiator
|
|
nodes that have class "Y" access to this target node's
|
|
memory. CPUs and other memory initiators in nodes not in
|
|
the list accessing this node's memory may have different
|
|
performance.
|
|
|
|
What: /sys/devices/system/node/nodeX/accessY/targets/
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
The directory containing symlinks to memory targets that
|
|
this initiator node has class "Y" access.
|
|
|
|
What: /sys/devices/system/node/nodeX/accessY/initiators/read_bandwidth
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
This node's read bandwidth in MB/s when accessed from
|
|
nodes found in this access class's linked initiators.
|
|
|
|
What: /sys/devices/system/node/nodeX/accessY/initiators/read_latency
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
This node's read latency in nanoseconds when accessed
|
|
from nodes found in this access class's linked initiators.
|
|
|
|
What: /sys/devices/system/node/nodeX/accessY/initiators/write_bandwidth
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
This node's write bandwidth in MB/s when accessed from
|
|
found in this access class's linked initiators.
|
|
|
|
What: /sys/devices/system/node/nodeX/accessY/initiators/write_latency
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
This node's write latency in nanoseconds when access
|
|
from nodes found in this class's linked initiators.
|
|
|
|
What: /sys/devices/system/node/nodeX/memory_side_cache/indexY/
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
The directory containing attributes for the memory-side cache
|
|
level 'Y'.
|
|
|
|
What: /sys/devices/system/node/nodeX/memory_side_cache/indexY/indexing
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
The caches associativity indexing: 0 for direct mapped,
|
|
non-zero if indexed.
|
|
|
|
What: /sys/devices/system/node/nodeX/memory_side_cache/indexY/line_size
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
The number of bytes accessed from the next cache level on a
|
|
cache miss.
|
|
|
|
What: /sys/devices/system/node/nodeX/memory_side_cache/indexY/size
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
The size of this memory side cache in bytes.
|
|
|
|
What: /sys/devices/system/node/nodeX/memory_side_cache/indexY/write_policy
|
|
Date: December 2018
|
|
Contact: Keith Busch <keith.busch@intel.com>
|
|
Description:
|
|
The cache write policy: 0 for write-back, 1 for write-through,
|
|
other or unknown.
|
|
|
|
What: /sys/devices/system/node/nodeX/x86/sgx_total_bytes
|
|
Date: November 2021
|
|
Contact: Jarkko Sakkinen <jarkko@kernel.org>
|
|
Description:
|
|
The total amount of SGX physical memory in bytes.
|