1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef __PERF_CPUTOPO_H |
3 | #define __PERF_CPUTOPO_H |
4 | |
5 | #include <linux/types.h> |
6 | |
7 | struct cpu_topology { |
8 | /* The number of unique package_cpus_lists below. */ |
9 | u32 package_cpus_lists; |
10 | /* The number of unique die_cpu_lists below. */ |
11 | u32 die_cpus_lists; |
12 | /* The number of unique core_cpu_lists below. */ |
13 | u32 core_cpus_lists; |
14 | /* |
15 | * An array of strings where each string is unique and read from |
16 | * /sys/devices/system/cpu/cpuX/topology/package_cpus_list. From the ABI |
17 | * each of these is a human-readable list of CPUs sharing the same |
18 | * physical_package_id. The format is like 0-3, 8-11, 14,17. |
19 | */ |
20 | const char **package_cpus_list; |
21 | /* |
22 | * An array of string where each string is unique and from |
23 | * /sys/devices/system/cpu/cpuX/topology/die_cpus_list. From the ABI |
24 | * each of these is a human-readable list of CPUs within the same die. |
25 | * The format is like 0-3, 8-11, 14,17. |
26 | */ |
27 | const char **die_cpus_list; |
28 | /* |
29 | * An array of string where each string is unique and from |
30 | * /sys/devices/system/cpu/cpuX/topology/core_cpus_list. From the ABI |
31 | * each of these is a human-readable list of CPUs within the same |
32 | * core. The format is like 0-3, 8-11, 14,17. |
33 | */ |
34 | const char **core_cpus_list; |
35 | }; |
36 | |
37 | struct numa_topology_node { |
38 | char *cpus; |
39 | u32 node; |
40 | u64 mem_total; |
41 | u64 mem_free; |
42 | }; |
43 | |
44 | struct numa_topology { |
45 | u32 nr; |
46 | struct numa_topology_node nodes[]; |
47 | }; |
48 | |
49 | struct hybrid_topology_node { |
50 | char *pmu_name; |
51 | char *cpus; |
52 | }; |
53 | |
54 | struct hybrid_topology { |
55 | u32 nr; |
56 | struct hybrid_topology_node nodes[]; |
57 | }; |
58 | |
59 | /* |
60 | * The topology for online CPUs, lazily created. |
61 | */ |
62 | const struct cpu_topology *online_topology(void); |
63 | |
64 | struct cpu_topology *cpu_topology__new(void); |
65 | void cpu_topology__delete(struct cpu_topology *tp); |
66 | /* Determine from the core list whether SMT was enabled. */ |
67 | bool cpu_topology__smt_on(const struct cpu_topology *topology); |
68 | /* Are the sets of SMT siblings all enabled or all disabled in user_requested_cpus. */ |
69 | bool cpu_topology__core_wide(const struct cpu_topology *topology, |
70 | const char *user_requested_cpu_list); |
71 | |
72 | struct numa_topology *numa_topology__new(void); |
73 | void numa_topology__delete(struct numa_topology *tp); |
74 | |
75 | struct hybrid_topology *hybrid_topology__new(void); |
76 | void hybrid_topology__delete(struct hybrid_topology *tp); |
77 | |
78 | #endif /* __PERF_CPUTOPO_H */ |
79 | |