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        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#ifdef HAVE_LIBBPF_SUPPORT
  81        /*
  82         * bpf_info_lock protects bpf rbtrees. This is needed because the
  83         * trees are accessed by different threads in perf-top
  84         */
  85        struct {
  86                struct rw_semaphore     lock;
  87                struct rb_root          infos;
  88                u32                     infos_cnt;
  89                struct rb_root          btfs;
  90                u32                     btfs_cnt;
  91        } bpf_progs;
  92#endif // HAVE_LIBBPF_SUPPORT
  93        /* same reason as above (for perf-top) */
  94        struct {
  95                struct rw_semaphore     lock;
  96                struct rb_root          tree;
  97        } cgroups;
  98
  99        /* For fast cpu to numa node lookup via perf_env__numa_node */
 100        int                     *numa_map;
 101        int                      nr_numa_map;
 102
 103        /* For real clock time reference. */
 104        struct {
 105                u64     tod_ns;
 106                u64     clockid_ns;
 107                u64     clockid_res_ns;
 108                int     clockid;
 109                /*
 110                 * enabled is valid for report mode, and is true if above
 111                 * values are set, it's set in process_clock_data
 112                 */
 113                bool    enabled;
 114        } clock;
 115};
 116
 117enum perf_compress_type {
 118        PERF_COMP_NONE = 0,
 119        PERF_COMP_ZSTD,
 120        PERF_COMP_MAX
 121};
 122
 123struct bpf_prog_info_node;
 124struct btf_node;
 125
 126extern struct perf_env perf_env;
 127
 128void perf_env__exit(struct perf_env *env);
 129
 130int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]);
 131
 132int perf_env__read_cpuid(struct perf_env *env);
 133int perf_env__read_cpu_topology_map(struct perf_env *env);
 134
 135void cpu_cache_level__free(struct cpu_cache_level *cache);
 136
 137const char *perf_env__arch(struct perf_env *env);
 138const char *perf_env__raw_arch(struct perf_env *env);
 139int perf_env__nr_cpus_avail(struct perf_env *env);
 140
 141void perf_env__init(struct perf_env *env);
 142void perf_env__insert_bpf_prog_info(struct perf_env *env,
 143                                    struct bpf_prog_info_node *info_node);
 144struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
 145                                                        __u32 prog_id);
 146void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node);
 147struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id);
 148
 149int perf_env__numa_node(struct perf_env *env, int cpu);
 150#endif /* __PERF_ENV_H */
 151