• Home
  • Raw
  • Download

Lines Matching full:perf

49 #include "perf/i915/intel_perf.h"
50 #include "perf/xe/intel_perf.h"
51 #include "perf/intel_perf.h"
52 #include "perf/intel_perf_common.h"
53 #include "perf/intel_perf_regs.h"
54 #include "perf/intel_perf_mdapi.h"
55 #include "perf/intel_perf_metrics.h"
56 #include "perf/intel_perf_private.h"
58 #include "perf/i915/intel_perf.h"
59 #include "perf/xe/intel_perf.h"
84 get_sysfs_dev_dir(struct intel_perf_config *perf, int fd) in get_sysfs_dev_dir() argument
92 perf->sysfs_dev_dir[0] = '\0'; in get_sysfs_dev_dir()
110 len = snprintf(perf->sysfs_dev_dir, in get_sysfs_dev_dir()
111 sizeof(perf->sysfs_dev_dir), in get_sysfs_dev_dir()
113 if (len < 0 || len >= sizeof(perf->sysfs_dev_dir)) { in get_sysfs_dev_dir()
118 drmdir = opendir(perf->sysfs_dev_dir); in get_sysfs_dev_dir()
120 DBG("Failed to open %s: %m\n", perf->sysfs_dev_dir); in get_sysfs_dev_dir()
125 if (is_dir_or_link(drm_entry, perf->sysfs_dev_dir) && in get_sysfs_dev_dir()
128 len = snprintf(perf->sysfs_dev_dir, in get_sysfs_dev_dir()
129 sizeof(perf->sysfs_dev_dir), in get_sysfs_dev_dir()
133 if (len < 0 || len >= sizeof(perf->sysfs_dev_dir)) in get_sysfs_dev_dir()
149 read_sysfs_drm_device_file_uint64(struct intel_perf_config *perf, in read_sysfs_drm_device_file_uint64() argument
156 len = snprintf(buf, sizeof(buf), "%s/%s", perf->sysfs_dev_dir, file); in read_sysfs_drm_device_file_uint64()
166 oa_config_enabled(struct intel_perf_config *perf, in oa_config_enabled() argument
171 return perf->enable_all_metrics || !is_extended_metric; in oa_config_enabled()
175 register_oa_config(struct intel_perf_config *perf, in register_oa_config() argument
180 if (!oa_config_enabled(perf, query)) in register_oa_config()
184 intel_perf_append_query_info(perf, 0); in register_oa_config()
193 enumerate_sysfs_metrics(struct intel_perf_config *perf, in enumerate_sysfs_metrics() argument
201 len = snprintf(buf, sizeof(buf), "%s/metrics", perf->sysfs_dev_dir); in enumerate_sysfs_metrics()
220 entry = _mesa_hash_table_search(perf->oa_metrics_table, in enumerate_sysfs_metrics()
224 if (!intel_perf_load_metric_id(perf, metric_entry->d_name, &id)) { in enumerate_sysfs_metrics()
229 register_oa_config(perf, devinfo, in enumerate_sysfs_metrics()
239 add_all_metrics(struct intel_perf_config *perf, in add_all_metrics() argument
242 hash_table_foreach(perf->oa_metrics_table, entry) { in add_all_metrics()
244 register_oa_config(perf, devinfo, query, 0); in add_all_metrics()
249 kernel_has_dynamic_config_support(struct intel_perf_config *perf, int fd) in kernel_has_dynamic_config_support() argument
251 switch (perf->devinfo->kmd_type) { in kernel_has_dynamic_config_support()
253 return i915_has_dynamic_config_support(perf, fd); in kernel_has_dynamic_config_support()
277 kmd_add_config(struct intel_perf_config *perf, int fd, in kmd_add_config() argument
281 switch (perf->devinfo->kmd_type) { in kmd_add_config()
283 return i915_add_config(perf, fd, config, guid); in kmd_add_config()
285 return xe_add_config(perf, fd, config, guid); in kmd_add_config()
293 init_oa_configs(struct intel_perf_config *perf, int fd, in init_oa_configs() argument
296 hash_table_foreach(perf->oa_metrics_table, entry) { in init_oa_configs()
300 if (intel_perf_load_metric_id(perf, query->guid, &config_id)) { in init_oa_configs()
302 register_oa_config(perf, devinfo, query, config_id); in init_oa_configs()
306 uint64_t ret = kmd_add_config(perf, fd, &query->config, query->guid); in init_oa_configs()
313 register_oa_config(perf, devinfo, query, ret); in init_oa_configs()
319 compute_topology_builtins(struct intel_perf_config *perf) in compute_topology_builtins() argument
321 const struct intel_device_info *devinfo = perf->devinfo; in compute_topology_builtins()
323 perf->sys_vars.slice_mask = devinfo->slice_masks; in compute_topology_builtins()
324 perf->sys_vars.n_eu_slices = devinfo->num_slices; in compute_topology_builtins()
325 perf->sys_vars.n_l3_banks = devinfo->l3_banks; in compute_topology_builtins()
326 perf->sys_vars.n_l3_nodes = devinfo->l3_banks / 4; in compute_topology_builtins()
327 perf->sys_vars.n_sq_idis = devinfo->num_slices; in compute_topology_builtins()
329 perf->sys_vars.n_eu_slice0123 = 0; in compute_topology_builtins()
340 perf->sys_vars.n_eu_slice0123++; in compute_topology_builtins()
345 perf->sys_vars.n_eu_sub_slices = intel_device_info_subslice_total(devinfo); in compute_topology_builtins()
346 perf->sys_vars.n_eus = intel_device_info_eu_total(devinfo); in compute_topology_builtins()
355 perf->sys_vars.subslice_mask = 0; in compute_topology_builtins()
362 perf->sys_vars.subslice_mask |= 1ULL << (s * bits_per_subslice + ss); in compute_topology_builtins()
368 init_oa_sys_vars(struct intel_perf_config *perf, in init_oa_sys_vars() argument
376 switch (perf->devinfo->kmd_type) { in init_oa_sys_vars()
390 if (!read_sysfs_drm_device_file_uint64(perf, min_file, &min_freq_mhz)) in init_oa_sys_vars()
393 if (!read_sysfs_drm_device_file_uint64(perf, max_file, &max_freq_mhz)) in init_oa_sys_vars()
400 memset(&perf->sys_vars, 0, sizeof(perf->sys_vars)); in init_oa_sys_vars()
401 perf->sys_vars.gt_min_freq = min_freq_mhz * 1000000; in init_oa_sys_vars()
402 perf->sys_vars.gt_max_freq = max_freq_mhz * 1000000; in init_oa_sys_vars()
403 perf->sys_vars.query_mode = use_register_snapshots; in init_oa_sys_vars()
404 compute_topology_builtins(perf); in init_oa_sys_vars()
623 build_unique_counter_list(struct intel_perf_config *perf) in build_unique_counter_list() argument
627 for (int q = 0; q < perf->n_queries; q++) in build_unique_counter_list()
628 max_counters += perf->queries[q].n_counters; in build_unique_counter_list()
636 rzalloc_array_size(perf, sizeof(counter_infos[0]), max_counters); in build_unique_counter_list()
638 perf->n_counters = 0; in build_unique_counter_list()
645 for (int q = 0; q < perf->n_queries ; q++) { in build_unique_counter_list()
646 struct intel_perf_query_info *query = &perf->queries[q]; in build_unique_counter_list()
660 assert(perf->n_counters < max_counters); in build_unique_counter_list()
662 counter_info = &counter_infos[perf->n_counters++]; in build_unique_counter_list()
675 perf->counter_infos = counter_infos; in build_unique_counter_list()
677 qsort(perf->counter_infos, perf->n_counters, sizeof(perf->counter_infos[0]), in build_unique_counter_list()
682 oa_metrics_available(struct intel_perf_config *perf, int fd, in oa_metrics_available() argument
689 perf->devinfo = devinfo; in oa_metrics_available()
693 perf->features_supported = INTEL_PERF_FEATURE_QUERY_PERF; in oa_metrics_available()
697 perf->enable_all_metrics = debug_get_bool_option("INTEL_EXTENDED_METRICS", false); in oa_metrics_available()
704 perf->oa_timestamp_shift = 1; in oa_metrics_available()
706 perf->oa_timestamp_mask = in oa_metrics_available()
707 0xffffffffffffffffull >> (32 + perf->oa_timestamp_shift); in oa_metrics_available()
711 oa_metrics_available = i915_oa_metrics_available(perf, fd, use_register_snapshots); in oa_metrics_available()
714 oa_metrics_available = xe_oa_metrics_available(perf, fd, use_register_snapshots); in oa_metrics_available()
723 get_sysfs_dev_dir(perf, fd) && in oa_metrics_available()
724 init_oa_sys_vars(perf, use_register_snapshots); in oa_metrics_available()
728 load_oa_metrics(struct intel_perf_config *perf, int fd, in load_oa_metrics() argument
731 int existing_queries = perf->n_queries; in load_oa_metrics()
735 perf->oa_metrics_table = in load_oa_metrics()
736 _mesa_hash_table_create(perf, _mesa_hash_string, in load_oa_metrics()
742 oa_register(perf); in load_oa_metrics()
745 if (kernel_has_dynamic_config_support(perf, fd)) in load_oa_metrics()
746 init_oa_configs(perf, fd, devinfo); in load_oa_metrics()
748 enumerate_sysfs_metrics(perf, devinfo); in load_oa_metrics()
750 add_all_metrics(perf, devinfo); in load_oa_metrics()
754 for (int i = existing_queries; i < perf->n_queries; ++i) in load_oa_metrics()
755 sort_query(&perf->queries[i]); in load_oa_metrics()
760 for (int i = existing_queries; i < perf->n_queries; i++) { in load_oa_metrics()
761 if (perf->queries[i].symbol_name && in load_oa_metrics()
762 strcmp(perf->queries[i].symbol_name, "TestOa") == 0) { in load_oa_metrics()
763 perf->fallback_raw_oa_metric = perf->queries[i].oa_metrics_set_id; in load_oa_metrics()
767 if (perf->fallback_raw_oa_metric == 0 && perf->n_queries > 0) in load_oa_metrics()
768 perf->fallback_raw_oa_metric = perf->queries[perf->n_queries - 1].oa_metrics_set_id; in load_oa_metrics()
851 get_passes_mask(struct intel_perf_config *perf, in get_passes_mask() argument
861 assert(counter_idx < perf->n_counters); in get_passes_mask()
864 &perf->counter_infos[counter_idx]; in get_passes_mask()
903 intel_perf_get_n_passes(struct intel_perf_config *perf, in intel_perf_get_n_passes() argument
911 get_passes_mask(perf, counter_indices, counter_indices_count, queries_mask); in intel_perf_get_n_passes()
915 for (uint32_t q = 0; q < perf->n_queries; q++) { in intel_perf_get_n_passes()
917 pass_queries[pass++] = &perf->queries[q]; in intel_perf_get_n_passes()
925 intel_perf_get_counters_passes(struct intel_perf_config *perf, in intel_perf_get_counters_passes() argument
933 get_passes_mask(perf, counter_indices, counter_indices_count, queries_mask); in intel_perf_get_counters_passes()
936 assert(counter_indices[i] < perf->n_counters); in intel_perf_get_counters_passes()
939 counter_pass[i].counter = perf->counter_infos[counter_idx].counter; in intel_perf_get_counters_passes()
942 &perf->counter_infos[counter_idx]; in intel_perf_get_counters_passes()
954 counter_pass[i].query = &perf->queries[query_idx]; in intel_perf_get_counters_passes()
1064 if (query->perf->devinfo->verx10 >= 200) { in intel_perf_report_timestamp()
1066 return data_u64 >> query->perf->oa_timestamp_shift; in intel_perf_report_timestamp()
1069 return report[1] >> query->perf->oa_timestamp_shift; in intel_perf_report_timestamp()
1078 const struct intel_device_info *devinfo = query->perf->devinfo; in intel_perf_query_result_accumulate()
1081 if (query->perf->devinfo->verx10 >= 200) { in intel_perf_query_result_accumulate()
1099 assert(intel_perf_get_oa_format(query->perf) == query->oa_format); in intel_perf_query_result_accumulate()
1100 if (query->perf->devinfo->verx10 >= 200) { in intel_perf_query_result_accumulate()
1110 } else if (query->perf->devinfo->verx10 >= 125) { in intel_perf_query_result_accumulate()
1149 if (can_use_mi_rpc_bc_counters(query->perf->devinfo) || in intel_perf_query_result_accumulate()
1150 !query->perf->sys_vars.query_mode) { in intel_perf_query_result_accumulate()
1169 } else if (query->perf->devinfo->verx10 >= 120) { in intel_perf_query_result_accumulate()
1190 if (can_use_mi_rpc_bc_counters(query->perf->devinfo) || in intel_perf_query_result_accumulate()
1191 !query->perf->sys_vars.query_mode) { in intel_perf_query_result_accumulate()
1292 const struct intel_perf_query_field_layout *layout = &query->perf->query_layout; in intel_perf_query_result_accumulate_fields()
1293 const struct intel_device_info *devinfo = query->perf->devinfo; in intel_perf_query_result_accumulate_fields()
1302 /* no_oa_accumulate=true is used when doing GL perf queries, we in intel_perf_query_result_accumulate_fields()
1350 const struct intel_perf_query_field_layout *layout = &query->perf->query_layout; in intel_perf_query_result_print_fields()
1597 * Read perf stream samples.