~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/util/env.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef __PERF_ENV_H
  3 #define __PERF_ENV_H
  4 
  5 #include <linux/types.h>
  6 #include <linux/rbtree.h>
  7 #include "cpumap.h"
  8 #include "rwsem.h"
  9 
 10 struct perf_cpu_map;
 11 
 12 struct cpu_topology_map {
 13         int     socket_id;
 14         int     die_id;
 15         int     cluster_id;
 16         int     core_id;
 17 };
 18 
 19 struct cpu_cache_level {
 20         u32     level;
 21         u32     line_size;
 22         u32     sets;
 23         u32     ways;
 24         char    *type;
 25         char    *size;
 26         char    *map;
 27 };
 28 
 29 struct numa_node {
 30         u32              node;
 31         u64              mem_total;
 32         u64              mem_free;
 33         struct perf_cpu_map     *map;
 34 };
 35 
 36 struct memory_node {
 37         u64              node;
 38         u64              size;
 39         unsigned long   *set;
 40 };
 41 
 42 struct hybrid_node {
 43         char    *pmu_name;
 44         char    *cpus;
 45 };
 46 
 47 struct pmu_caps {
 48         int             nr_caps;
 49         unsigned int    max_branches;
 50         unsigned int    br_cntr_nr;
 51         unsigned int    br_cntr_width;
 52 
 53         char            **caps;
 54         char            *pmu_name;
 55 };
 56 
 57 typedef const char *(arch_syscalls__strerrno_t)(int err);
 58 
 59 arch_syscalls__strerrno_t *arch_syscalls__strerrno_function(const char *arch);
 60 
 61 struct perf_env {
 62         char                    *hostname;
 63         char                    *os_release;
 64         char                    *version;
 65         char                    *arch;
 66         int                     nr_cpus_online;
 67         int                     nr_cpus_avail;
 68         char                    *cpu_desc;
 69         char                    *cpuid;
 70         unsigned long long      total_mem;
 71         unsigned int            msr_pmu_type;
 72         unsigned int            max_branches;
 73         unsigned int            br_cntr_nr;
 74         unsigned int            br_cntr_width;
 75         int                     kernel_is_64_bit;
 76 
 77         int                     nr_cmdline;
 78         int                     nr_sibling_cores;
 79         int                     nr_sibling_dies;
 80         int                     nr_sibling_threads;
 81         int                     nr_numa_nodes;
 82         int                     nr_memory_nodes;
 83         int                     nr_pmu_mappings;
 84         int                     nr_groups;
 85         int                     nr_cpu_pmu_caps;
 86         int                     nr_hybrid_nodes;
 87         int                     nr_pmus_with_caps;
 88         char                    *cmdline;
 89         const char              **cmdline_argv;
 90         char                    *sibling_cores;
 91         char                    *sibling_dies;
 92         char                    *sibling_threads;
 93         char                    *pmu_mappings;
 94         char                    **cpu_pmu_caps;
 95         struct cpu_topology_map *cpu;
 96         struct cpu_cache_level  *caches;
 97         int                      caches_cnt;
 98         u32                     comp_ratio;
 99         u32                     comp_ver;
100         u32                     comp_type;
101         u32                     comp_level;
102         u32                     comp_mmap_len;
103         struct numa_node        *numa_nodes;
104         struct memory_node      *memory_nodes;
105         unsigned long long       memory_bsize;
106         struct hybrid_node      *hybrid_nodes;
107         struct pmu_caps         *pmu_caps;
108 #ifdef HAVE_LIBBPF_SUPPORT
109         /*
110          * bpf_info_lock protects bpf rbtrees. This is needed because the
111          * trees are accessed by different threads in perf-top
112          */
113         struct {
114                 struct rw_semaphore     lock;
115                 struct rb_root          infos;
116                 u32                     infos_cnt;
117                 struct rb_root          btfs;
118                 u32                     btfs_cnt;
119         } bpf_progs;
120 #endif // HAVE_LIBBPF_SUPPORT
121         /* same reason as above (for perf-top) */
122         struct {
123                 struct rw_semaphore     lock;
124                 struct rb_root          tree;
125         } cgroups;
126 
127         /* For fast cpu to numa node lookup via perf_env__numa_node */
128         int                     *numa_map;
129         int                      nr_numa_map;
130 
131         /* For real clock time reference. */
132         struct {
133                 u64     tod_ns;
134                 u64     clockid_ns;
135                 u64     clockid_res_ns;
136                 int     clockid;
137                 /*
138                  * enabled is valid for report mode, and is true if above
139                  * values are set, it's set in process_clock_data
140                  */
141                 bool    enabled;
142         } clock;
143         arch_syscalls__strerrno_t *arch_strerrno;
144 };
145 
146 enum perf_compress_type {
147         PERF_COMP_NONE = 0,
148         PERF_COMP_ZSTD,
149         PERF_COMP_MAX
150 };
151 
152 struct bpf_prog_info_node;
153 struct btf_node;
154 
155 extern struct perf_env perf_env;
156 
157 void perf_env__exit(struct perf_env *env);
158 
159 int perf_env__kernel_is_64_bit(struct perf_env *env);
160 
161 int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]);
162 
163 int perf_env__read_cpuid(struct perf_env *env);
164 int perf_env__read_pmu_mappings(struct perf_env *env);
165 int perf_env__nr_pmu_mappings(struct perf_env *env);
166 const char *perf_env__pmu_mappings(struct perf_env *env);
167 
168 int perf_env__read_cpu_topology_map(struct perf_env *env);
169 
170 void cpu_cache_level__free(struct cpu_cache_level *cache);
171 
172 const char *perf_env__arch(struct perf_env *env);
173 const char *perf_env__arch_strerrno(struct perf_env *env, int err);
174 const char *perf_env__cpuid(struct perf_env *env);
175 const char *perf_env__raw_arch(struct perf_env *env);
176 int perf_env__nr_cpus_avail(struct perf_env *env);
177 
178 void perf_env__init(struct perf_env *env);
179 void __perf_env__insert_bpf_prog_info(struct perf_env *env,
180                                       struct bpf_prog_info_node *info_node);
181 void perf_env__insert_bpf_prog_info(struct perf_env *env,
182                                     struct bpf_prog_info_node *info_node);
183 struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
184                                                         __u32 prog_id);
185 bool perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node);
186 bool __perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node);
187 struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id);
188 struct btf_node *__perf_env__find_btf(struct perf_env *env, __u32 btf_id);
189 
190 int perf_env__numa_node(struct perf_env *env, struct perf_cpu cpu);
191 char *perf_env__find_pmu_cap(struct perf_env *env, const char *pmu_name,
192                              const char *cap);
193 
194 bool perf_env__has_pmu_mapping(struct perf_env *env, const char *pmu_name);
195 #endif /* __PERF_ENV_H */
196 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php