linux/tools/perf/util/env.h
<<
>>
Prefs
   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
  52        int                     nr_cmdline;
  53        int                     nr_sibling_cores;
  54        int                     nr_sibling_dies;
  55        int                     nr_sibling_threads;
  56        int                     nr_numa_nodes;
  57        int                     nr_memory_nodes;
  58        int                     nr_pmu_mappings;
  59        int                     nr_groups;
  60        char                    *cmdline;
  61        const char              **cmdline_argv;
  62        char                    *sibling_cores;
  63        char                    *sibling_dies;
  64        char                    *sibling_threads;
  65        char                    *pmu_mappings;
  66        struct cpu_topology_map *cpu;
  67        struct cpu_cache_level  *caches;
  68        int                      caches_cnt;
  69        u32                     comp_ratio;
  70        u32                     comp_ver;
  71        u32                     comp_type;
  72        u32                     comp_level;
  73        u32                     comp_mmap_len;
  74        struct numa_node        *numa_nodes;
  75        struct memory_node      *memory_nodes;
  76        unsigned long long       memory_bsize;
  77        u64                     clockid_res_ns;
  78
  79        /*
  80         * bpf_info_lock protects bpf rbtrees. This is needed because the
  81         * trees are accessed by different threads in perf-top
  82         */
  83        struct {
  84                struct rw_semaphore     lock;
  85                struct rb_root          infos;
  86                u32                     infos_cnt;
  87                struct rb_root          btfs;
  88                u32                     btfs_cnt;
  89        } bpf_progs;
  90};
  91
  92enum perf_compress_type {
  93        PERF_COMP_NONE = 0,
  94        PERF_COMP_ZSTD,
  95        PERF_COMP_MAX
  96};
  97
  98struct bpf_prog_info_node;
  99struct btf_node;
 100
 101extern struct perf_env perf_env;
 102
 103void perf_env__exit(struct perf_env *env);
 104
 105int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]);
 106
 107int perf_env__read_cpu_topology_map(struct perf_env *env);
 108
 109void cpu_cache_level__free(struct cpu_cache_level *cache);
 110
 111const char *perf_env__arch(struct perf_env *env);
 112const char *perf_env__raw_arch(struct perf_env *env);
 113int perf_env__nr_cpus_avail(struct perf_env *env);
 114
 115void perf_env__init(struct perf_env *env);
 116void perf_env__insert_bpf_prog_info(struct perf_env *env,
 117                                    struct bpf_prog_info_node *info_node);
 118struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
 119                                                        __u32 prog_id);
 120void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node);
 121struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id);
 122#endif /* __PERF_ENV_H */
 123