Skip to content

Commit 328ea68

Browse files
aeglbp3tk0v
authored andcommitted
x86/resctrl: Prepare for new Sub-NUMA Cluster (SNC) monitor files
When SNC is enabled, monitoring data is collected at the SNC node granularity, but must be reported at L3-cache granularity for backwards compatibility in addition to reporting at the node level. Add a "ci" field to the rdt_mon_domain structure to save the cache information about the enclosing L3 cache for the domain. This provides: 1) The cache id which is needed to compose the name of the legacy monitoring directory, and to determine which domains should be summed to provide L3-scoped data. 2) The shared_cpu_map which is needed to determine which CPUs can be used to read the RMID counters with the MSR interface. This is the first step to an eventual goal of monitor reporting files like this (for a system with two SNC nodes per L3): $ cd /sys/fs/resctrl/mon_data $ tree mon_L3_00 mon_L3_00 <- 00 here is L3 cache id ├── llc_occupancy \ These files provide legacy support ├── mbm_local_bytes > for non-SNC aware monitor apps ├── mbm_total_bytes / that expect data at L3 cache level ├── mon_sub_L3_00 <- 00 here is SNC node id │   ├── llc_occupancy \ These files are finer grained │   ├── mbm_local_bytes > data from each SNC node │   └── mbm_total_bytes / └── mon_sub_L3_01 ├── llc_occupancy \ ├── mbm_local_bytes > As above, but for node 1. └── mbm_total_bytes / [ bp: Massage commit message. ] Signed-off-by: Tony Luck <[email protected]> Signed-off-by: Borislav Petkov (AMD) <[email protected]> Reviewed-by: Reinette Chatre <[email protected]> Tested-by: Babu Moger <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent ac20aa4 commit 328ea68

File tree

4 files changed

+9
-3
lines changed

4 files changed

+9
-3
lines changed

arch/x86/kernel/cpu/resctrl/core.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#include <linux/cpu.h>
2020
#include <linux/slab.h>
2121
#include <linux/err.h>
22-
#include <linux/cacheinfo.h>
2322
#include <linux/cpuhotplug.h>
2423

2524
#include <asm/cpu_device_id.h>
@@ -608,6 +607,12 @@ static void domain_add_cpu_mon(int cpu, struct rdt_resource *r)
608607
d = &hw_dom->d_resctrl;
609608
d->hdr.id = id;
610609
d->hdr.type = RESCTRL_MON_DOMAIN;
610+
d->ci = get_cpu_cacheinfo_level(cpu, RESCTRL_L3_CACHE);
611+
if (!d->ci) {
612+
pr_warn_once("Can't find L3 cache for CPU:%d resource %s\n", cpu, r->name);
613+
mon_domain_free(hw_dom);
614+
return;
615+
}
611616
cpumask_set_cpu(cpu, &d->hdr.cpu_mask);
612617

613618
if (arch_domain_mbm_alloc(r->num_rmid, hw_dom)) {

arch/x86/kernel/cpu/resctrl/pseudo_lock.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
1313

14-
#include <linux/cacheinfo.h>
1514
#include <linux/cpu.h>
1615
#include <linux/cpumask.h>
1716
#include <linux/debugfs.h>

arch/x86/kernel/cpu/resctrl/rdtgroup.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
1414

15-
#include <linux/cacheinfo.h>
1615
#include <linux/cpu.h>
1716
#include <linux/debugfs.h>
1817
#include <linux/fs.h>

include/linux/resctrl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#ifndef _RESCTRL_H
33
#define _RESCTRL_H
44

5+
#include <linux/cacheinfo.h>
56
#include <linux/kernel.h>
67
#include <linux/list.h>
78
#include <linux/pid.h>
@@ -96,6 +97,7 @@ struct rdt_ctrl_domain {
9697
/**
9798
* struct rdt_mon_domain - group of CPUs sharing a resctrl monitor resource
9899
* @hdr: common header for different domain types
100+
* @ci: cache info for this domain
99101
* @rmid_busy_llc: bitmap of which limbo RMIDs are above threshold
100102
* @mbm_total: saved state for MBM total bandwidth
101103
* @mbm_local: saved state for MBM local bandwidth
@@ -106,6 +108,7 @@ struct rdt_ctrl_domain {
106108
*/
107109
struct rdt_mon_domain {
108110
struct rdt_domain_hdr hdr;
111+
struct cacheinfo *ci;
109112
unsigned long *rmid_busy_llc;
110113
struct mbm_state *mbm_total;
111114
struct mbm_state *mbm_local;

0 commit comments

Comments
 (0)