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