env.h 3.2 KB

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