Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.8 138 lines 3.1 kB view raw
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 "rwsem.h" 8 9struct perf_cpu_map; 10 11struct cpu_topology_map { 12 int socket_id; 13 int die_id; 14 int core_id; 15}; 16 17struct cpu_cache_level { 18 u32 level; 19 u32 line_size; 20 u32 sets; 21 u32 ways; 22 char *type; 23 char *size; 24 char *map; 25}; 26 27struct numa_node { 28 u32 node; 29 u64 mem_total; 30 u64 mem_free; 31 struct perf_cpu_map *map; 32}; 33 34struct memory_node { 35 u64 node; 36 u64 size; 37 unsigned long *set; 38}; 39 40struct perf_env { 41 char *hostname; 42 char *os_release; 43 char *version; 44 char *arch; 45 int nr_cpus_online; 46 int nr_cpus_avail; 47 char *cpu_desc; 48 char *cpuid; 49 unsigned long long total_mem; 50 unsigned int msr_pmu_type; 51 unsigned int max_branches; 52 53 int nr_cmdline; 54 int nr_sibling_cores; 55 int nr_sibling_dies; 56 int nr_sibling_threads; 57 int nr_numa_nodes; 58 int nr_memory_nodes; 59 int nr_pmu_mappings; 60 int nr_groups; 61 int nr_cpu_pmu_caps; 62 char *cmdline; 63 const char **cmdline_argv; 64 char *sibling_cores; 65 char *sibling_dies; 66 char *sibling_threads; 67 char *pmu_mappings; 68 char *cpu_pmu_caps; 69 struct cpu_topology_map *cpu; 70 struct cpu_cache_level *caches; 71 int caches_cnt; 72 u32 comp_ratio; 73 u32 comp_ver; 74 u32 comp_type; 75 u32 comp_level; 76 u32 comp_mmap_len; 77 struct numa_node *numa_nodes; 78 struct memory_node *memory_nodes; 79 unsigned long long memory_bsize; 80 u64 clockid_res_ns; 81 82 /* 83 * bpf_info_lock protects bpf rbtrees. This is needed because the 84 * trees are accessed by different threads in perf-top 85 */ 86 struct { 87 struct rw_semaphore lock; 88 struct rb_root infos; 89 u32 infos_cnt; 90 struct rb_root btfs; 91 u32 btfs_cnt; 92 } bpf_progs; 93 94 /* same reason as above (for perf-top) */ 95 struct { 96 struct rw_semaphore lock; 97 struct rb_root tree; 98 } cgroups; 99 100 /* For fast cpu to numa node lookup via perf_env__numa_node */ 101 int *numa_map; 102 int nr_numa_map; 103}; 104 105enum perf_compress_type { 106 PERF_COMP_NONE = 0, 107 PERF_COMP_ZSTD, 108 PERF_COMP_MAX 109}; 110 111struct bpf_prog_info_node; 112struct btf_node; 113 114extern struct perf_env perf_env; 115 116void perf_env__exit(struct perf_env *env); 117 118int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]); 119 120int perf_env__read_cpuid(struct perf_env *env); 121int perf_env__read_cpu_topology_map(struct perf_env *env); 122 123void cpu_cache_level__free(struct cpu_cache_level *cache); 124 125const char *perf_env__arch(struct perf_env *env); 126const char *perf_env__raw_arch(struct perf_env *env); 127int perf_env__nr_cpus_avail(struct perf_env *env); 128 129void perf_env__init(struct perf_env *env); 130void perf_env__insert_bpf_prog_info(struct perf_env *env, 131 struct bpf_prog_info_node *info_node); 132struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env, 133 __u32 prog_id); 134void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node); 135struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id); 136 137int perf_env__numa_node(struct perf_env *env, int cpu); 138#endif /* __PERF_ENV_H */