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 hybrid_node {
  41        char    *pmu_name;
  42        char    *cpus;
  43};
  44
  45struct hybrid_cpc_node {
  46        int             nr_cpu_pmu_caps;
  47        unsigned int    max_branches;
  48        char            *cpu_pmu_caps;
  49        char            *pmu_name;
  50};
  51
  52struct perf_env {
  53        char                    *hostname;
  54        char                    *os_release;
  55        char                    *version;
  56        char                    *arch;
  57        int                     nr_cpus_online;
  58        int                     nr_cpus_avail;
  59        char                    *cpu_desc;
  60        char                    *cpuid;
  61        unsigned long long      total_mem;
  62        unsigned int            msr_pmu_type;
  63        unsigned int            max_branches;
  64
  65        int                     nr_cmdline;
  66        int                     nr_sibling_cores;
  67        int                     nr_sibling_dies;
  68        int                     nr_sibling_threads;
  69        int                     nr_numa_nodes;
  70        int                     nr_memory_nodes;
  71        int                     nr_pmu_mappings;
  72        int                     nr_groups;
  73        int                     nr_cpu_pmu_caps;
  74        int                     nr_hybrid_nodes;
  75        int                     nr_hybrid_cpc_nodes;
  76        char                    *cmdline;
  77        const char              **cmdline_argv;
  78        char                    *sibling_cores;
  79        char                    *sibling_dies;
  80        char                    *sibling_threads;
  81        char                    *pmu_mappings;
  82        char                    *cpu_pmu_caps;
  83        struct cpu_topology_map *cpu;
  84        struct cpu_cache_level  *caches;
  85        int                      caches_cnt;
  86        u32                     comp_ratio;
  87        u32                     comp_ver;
  88        u32                     comp_type;
  89        u32                     comp_level;
  90        u32                     comp_mmap_len;
  91        struct numa_node        *numa_nodes;
  92        struct memory_node      *memory_nodes;
  93        unsigned long long       memory_bsize;
  94        struct hybrid_node      *hybrid_nodes;
  95        struct hybrid_cpc_node  *hybrid_cpc_nodes;
  96#ifdef HAVE_LIBBPF_SUPPORT
  97        /*
  98         * bpf_info_lock protects bpf rbtrees. This is needed because the
  99         * trees are accessed by different threads in perf-top
 100         */
 101        struct {
 102                struct rw_semaphore     lock;
 103                struct rb_root          infos;
 104                u32                     infos_cnt;
 105                struct rb_root          btfs;
 106                u32                     btfs_cnt;
 107        } bpf_progs;
 108#endif // HAVE_LIBBPF_SUPPORT
 109        /* same reason as above (for perf-top) */
 110        struct {
 111                struct rw_semaphore     lock;
 112                struct rb_root          tree;
 113        } cgroups;
 114
 115        /* For fast cpu to numa node lookup via perf_env__numa_node */
 116        int                     *numa_map;
 117        int                      nr_numa_map;
 118
 119        /* For real clock time reference. */
 120        struct {
 121                u64     tod_ns;
 122                u64     clockid_ns;
 123                u64     clockid_res_ns;
 124                int     clockid;
 125                /*
 126                 * enabled is valid for report mode, and is true if above
 127                 * values are set, it's set in process_clock_data
 128                 */
 129                bool    enabled;
 130        } clock;
 131};
 132
 133enum perf_compress_type {
 134        PERF_COMP_NONE = 0,
 135        PERF_COMP_ZSTD,
 136        PERF_COMP_MAX
 137};
 138
 139struct bpf_prog_info_node;
 140struct btf_node;
 141
 142extern struct perf_env perf_env;
 143
 144void perf_env__exit(struct perf_env *env);
 145
 146int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]);
 147
 148int perf_env__read_cpuid(struct perf_env *env);
 149int perf_env__read_cpu_topology_map(struct perf_env *env);
 150
 151void cpu_cache_level__free(struct cpu_cache_level *cache);
 152
 153const char *perf_env__arch(struct perf_env *env);
 154const char *perf_env__raw_arch(struct perf_env *env);
 155int perf_env__nr_cpus_avail(struct perf_env *env);
 156
 157void perf_env__init(struct perf_env *env);
 158void perf_env__insert_bpf_prog_info(struct perf_env *env,
 159                                    struct bpf_prog_info_node *info_node);
 160struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
 161                                                        __u32 prog_id);
 162void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node);
 163struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id);
 164
 165int perf_env__numa_node(struct perf_env *env, int cpu);
 166#endif /* __PERF_ENV_H */
 167