summaryrefslogtreecommitdiffstats
path: root/include/linux/node.h
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2019-03-11 16:56:02 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-04-04 12:41:21 -0400
commitacc02a109b0497e917c83f986a89c51e47d0022c (patch)
treed91c422777692d123a0f5d42b96b6e5c76fba566 /include/linux/node.h
parente1cf33aafb8462c7d0a0e6349925870316f040ee (diff)
node: Add memory-side caching attributes
System memory may have caches to help improve access speed to frequently requested address ranges. While the system provided cache is transparent to the software accessing these memory ranges, applications can optimize their own access based on cache attributes. Provide a new API for the kernel to register these memory-side caches under the memory node that provides it. The new sysfs representation is modeled from the existing cpu cacheinfo attributes, as seen from /sys/devices/system/cpu/<cpu>/cache/. Unlike CPU cacheinfo though, the node cache level is reported from the view of the memory. A higher level number is nearer to the CPU, while lower levels are closer to the last level memory. The exported attributes are the cache size, the line size, associativity indexing, and write back policy, and add the attributes for the system memory caches to sysfs stable documentation. Signed-off-by: Keith Busch <keith.busch@intel.com> Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Brice Goglin <Brice.Goglin@inria.fr> Tested-by: Brice Goglin <Brice.Goglin@inria.fr> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/node.h')
-rw-r--r--include/linux/node.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/include/linux/node.h b/include/linux/node.h
index 4139d728f8b3..1a557c589ecb 100644
--- a/include/linux/node.h
+++ b/include/linux/node.h
@@ -35,10 +35,45 @@ struct node_hmem_attrs {
35 unsigned int write_latency; 35 unsigned int write_latency;
36}; 36};
37 37
38enum cache_indexing {
39 NODE_CACHE_DIRECT_MAP,
40 NODE_CACHE_INDEXED,
41 NODE_CACHE_OTHER,
42};
43
44enum cache_write_policy {
45 NODE_CACHE_WRITE_BACK,
46 NODE_CACHE_WRITE_THROUGH,
47 NODE_CACHE_WRITE_OTHER,
48};
49
50/**
51 * struct node_cache_attrs - system memory caching attributes
52 *
53 * @indexing: The ways memory blocks may be placed in cache
54 * @write_policy: Write back or write through policy
55 * @size: Total size of cache in bytes
56 * @line_size: Number of bytes fetched on a cache miss
57 * @level: The cache hierarchy level
58 */
59struct node_cache_attrs {
60 enum cache_indexing indexing;
61 enum cache_write_policy write_policy;
62 u64 size;
63 u16 line_size;
64 u8 level;
65};
66
38#ifdef CONFIG_HMEM_REPORTING 67#ifdef CONFIG_HMEM_REPORTING
68void node_add_cache(unsigned int nid, struct node_cache_attrs *cache_attrs);
39void node_set_perf_attrs(unsigned int nid, struct node_hmem_attrs *hmem_attrs, 69void node_set_perf_attrs(unsigned int nid, struct node_hmem_attrs *hmem_attrs,
40 unsigned access); 70 unsigned access);
41#else 71#else
72static inline void node_add_cache(unsigned int nid,
73 struct node_cache_attrs *cache_attrs)
74{
75}
76
42static inline void node_set_perf_attrs(unsigned int nid, 77static inline void node_set_perf_attrs(unsigned int nid,
43 struct node_hmem_attrs *hmem_attrs, 78 struct node_hmem_attrs *hmem_attrs,
44 unsigned access) 79 unsigned access)
@@ -53,6 +88,10 @@ struct node {
53#if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) && defined(CONFIG_HUGETLBFS) 88#if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) && defined(CONFIG_HUGETLBFS)
54 struct work_struct node_work; 89 struct work_struct node_work;
55#endif 90#endif
91#ifdef CONFIG_HMEM_REPORTING
92 struct list_head cache_attrs;
93 struct device *cache_dev;
94#endif
56}; 95};
57 96
58struct memory_block; 97struct memory_block;