Lines Matching +full:traces +full:- +full:db
48 #include "drm-uapi/amdgpu_drm.h"
144 header->magic_number = SQTT_FILE_MAGIC_NUMBER; in ac_sqtt_fill_header()
145 header->version_major = SQTT_FILE_VERSION_MAJOR; in ac_sqtt_fill_header()
146 header->version_minor = SQTT_FILE_VERSION_MINOR; in ac_sqtt_fill_header()
147 header->flags.value = 0; in ac_sqtt_fill_header()
148 header->flags.is_semaphore_queue_timing_etw = 1; in ac_sqtt_fill_header()
149 header->flags.no_queue_semaphore_timestamps = 0; in ac_sqtt_fill_header()
150 header->chunk_offset = sizeof(*header); in ac_sqtt_fill_header()
155 header->second = timep->tm_sec; in ac_sqtt_fill_header()
156 header->minute = timep->tm_min; in ac_sqtt_fill_header()
157 header->hour = timep->tm_hour; in ac_sqtt_fill_header()
158 header->day_in_month = timep->tm_mday; in ac_sqtt_fill_header()
159 header->month = timep->tm_mon; in ac_sqtt_fill_header()
160 header->year = timep->tm_year; in ac_sqtt_fill_header()
161 header->day_in_week = timep->tm_wday; in ac_sqtt_fill_header()
162 header->day_in_year = timep->tm_yday; in ac_sqtt_fill_header()
163 header->is_daylight_savings = timep->tm_isdst; in ac_sqtt_fill_header()
191 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_CPU_INFO; in ac_sqtt_fill_cpu_info()
192 chunk->header.chunk_id.index = 0; in ac_sqtt_fill_cpu_info()
193 chunk->header.major_version = 0; in ac_sqtt_fill_cpu_info()
194 chunk->header.minor_version = 0; in ac_sqtt_fill_cpu_info()
195 chunk->header.size_in_bytes = sizeof(*chunk); in ac_sqtt_fill_cpu_info()
197 chunk->cpu_timestamp_freq = 1000000000; /* tick set to 1ns */ in ac_sqtt_fill_cpu_info()
199 strncpy((char *)chunk->vendor_id, "Unknown", sizeof(chunk->vendor_id)); in ac_sqtt_fill_cpu_info()
200 strncpy((char *)chunk->processor_brand, "Unknown", sizeof(chunk->processor_brand)); in ac_sqtt_fill_cpu_info()
201 chunk->clock_speed = 0; in ac_sqtt_fill_cpu_info()
202 chunk->num_logical_cores = 0; in ac_sqtt_fill_cpu_info()
203 chunk->num_physical_cores = 0; in ac_sqtt_fill_cpu_info()
204 chunk->system_ram_size = 0; in ac_sqtt_fill_cpu_info()
206 chunk->system_ram_size = system_ram_size / (1024 * 1024); in ac_sqtt_fill_cpu_info()
219 char *ptr = (char *)chunk->vendor_id; in ac_sqtt_fill_cpu_info()
222 strncpy(ptr, v + 1, sizeof(chunk->vendor_id) - 1); in ac_sqtt_fill_cpu_info()
223 ptr[sizeof(chunk->vendor_id) - 1] = '\0'; in ac_sqtt_fill_cpu_info()
229 char *ptr = (char *)chunk->processor_brand; in ac_sqtt_fill_cpu_info()
232 strncpy(ptr, v + 1, sizeof(chunk->processor_brand) - 1); in ac_sqtt_fill_cpu_info()
233 ptr[sizeof(chunk->processor_brand) - 1] = '\0'; in ac_sqtt_fill_cpu_info()
249 chunk->num_logical_cores = v; in ac_sqtt_fill_cpu_info()
257 chunk->num_physical_cores = v; in ac_sqtt_fill_cpu_info()
261 if (chunk->num_logical_cores) in ac_sqtt_fill_cpu_info()
262 chunk->clock_speed = cpu_clock_speed_total / chunk->num_logical_cores; in ac_sqtt_fill_cpu_info()
434 bool has_wave32 = rad_info->gfx_level >= GFX10; in ac_sqtt_fill_asic_info()
436 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_ASIC_INFO; in ac_sqtt_fill_asic_info()
437 chunk->header.chunk_id.index = 0; in ac_sqtt_fill_asic_info()
438 chunk->header.major_version = 0; in ac_sqtt_fill_asic_info()
439 chunk->header.minor_version = 4; in ac_sqtt_fill_asic_info()
440 chunk->header.size_in_bytes = sizeof(*chunk); in ac_sqtt_fill_asic_info()
442 chunk->flags = 0; in ac_sqtt_fill_asic_info()
447 if (rad_info->gfx_level < GFX9) in ac_sqtt_fill_asic_info()
448 chunk->flags |= SQTT_FILE_CHUNK_ASIC_INFO_FLAG_SC_PACKER_NUMBERING; in ac_sqtt_fill_asic_info()
451 if (rad_info->gfx_level >= GFX9) in ac_sqtt_fill_asic_info()
452 chunk->flags |= SQTT_FILE_CHUNK_ASIC_INFO_FLAG_PS1_EVENT_TOKENS_ENABLED; in ac_sqtt_fill_asic_info()
454 chunk->trace_shader_core_clock = rad_info->max_gpu_freq_mhz * 1000000ull; in ac_sqtt_fill_asic_info()
455 chunk->trace_memory_clock = rad_info->memory_freq_mhz * 1000000ull; in ac_sqtt_fill_asic_info()
459 if (!chunk->trace_shader_core_clock) in ac_sqtt_fill_asic_info()
460 chunk->trace_shader_core_clock = 1300000000; in ac_sqtt_fill_asic_info()
461 if (!chunk->trace_memory_clock) in ac_sqtt_fill_asic_info()
462 chunk->trace_memory_clock = 687000000; in ac_sqtt_fill_asic_info()
464 chunk->device_id = rad_info->pci_id; in ac_sqtt_fill_asic_info()
465 chunk->device_revision_id = rad_info->pci_rev_id; in ac_sqtt_fill_asic_info()
466 chunk->vgprs_per_simd = rad_info->num_physical_wave64_vgprs_per_simd * (has_wave32 ? 2 : 1); in ac_sqtt_fill_asic_info()
467 chunk->sgprs_per_simd = rad_info->num_physical_sgprs_per_simd; in ac_sqtt_fill_asic_info()
468 chunk->shader_engines = rad_info->max_se; in ac_sqtt_fill_asic_info()
469 chunk->compute_unit_per_shader_engine = rad_info->min_good_cu_per_sa * rad_info->max_sa_per_se; in ac_sqtt_fill_asic_info()
470 chunk->simd_per_compute_unit = rad_info->num_simd_per_compute_unit; in ac_sqtt_fill_asic_info()
471 chunk->wavefronts_per_simd = rad_info->max_wave64_per_simd; in ac_sqtt_fill_asic_info()
473 chunk->minimum_vgpr_alloc = rad_info->min_wave64_vgpr_alloc; in ac_sqtt_fill_asic_info()
474 chunk->vgpr_alloc_granularity = rad_info->wave64_vgpr_alloc_granularity * (has_wave32 ? 2 : 1); in ac_sqtt_fill_asic_info()
475 chunk->minimum_sgpr_alloc = rad_info->min_sgpr_alloc; in ac_sqtt_fill_asic_info()
476 chunk->sgpr_alloc_granularity = rad_info->sgpr_alloc_granularity; in ac_sqtt_fill_asic_info()
478 chunk->hardware_contexts = 8; in ac_sqtt_fill_asic_info()
479 chunk->gpu_type = in ac_sqtt_fill_asic_info()
480 rad_info->has_dedicated_vram ? SQTT_GPU_TYPE_DISCRETE : SQTT_GPU_TYPE_INTEGRATED; in ac_sqtt_fill_asic_info()
481 chunk->gfxip_level = ac_gfx_level_to_sqtt_gfxip_level(rad_info->gfx_level); in ac_sqtt_fill_asic_info()
482 chunk->gpu_index = 0; in ac_sqtt_fill_asic_info()
484 chunk->max_number_of_dedicated_cus = 0; in ac_sqtt_fill_asic_info()
485 chunk->ce_ram_size = 0; in ac_sqtt_fill_asic_info()
486 chunk->ce_ram_size_graphics = 0; in ac_sqtt_fill_asic_info()
487 chunk->ce_ram_size_compute = 0; in ac_sqtt_fill_asic_info()
489 chunk->vram_bus_width = rad_info->memory_bus_width; in ac_sqtt_fill_asic_info()
490 chunk->vram_size = (uint64_t)rad_info->vram_size_kb * 1024; in ac_sqtt_fill_asic_info()
491 chunk->l2_cache_size = rad_info->l2_cache_size; in ac_sqtt_fill_asic_info()
492 chunk->l1_cache_size = rad_info->l1_cache_size; in ac_sqtt_fill_asic_info()
493 chunk->lds_size = rad_info->lds_size_per_workgroup; in ac_sqtt_fill_asic_info()
494 if (rad_info->gfx_level >= GFX10) { in ac_sqtt_fill_asic_info()
496 chunk->lds_size /= 2; in ac_sqtt_fill_asic_info()
499 strncpy(chunk->gpu_name, rad_info->name, SQTT_GPU_NAME_MAX_SIZE - 1); in ac_sqtt_fill_asic_info()
501 chunk->alu_per_clock = 0.0; in ac_sqtt_fill_asic_info()
502 chunk->texture_per_clock = 0.0; in ac_sqtt_fill_asic_info()
503 chunk->prims_per_clock = rad_info->max_se; in ac_sqtt_fill_asic_info()
504 if (rad_info->gfx_level == GFX10) in ac_sqtt_fill_asic_info()
505 chunk->prims_per_clock *= 2; in ac_sqtt_fill_asic_info()
506 chunk->pixels_per_clock = 0.0; in ac_sqtt_fill_asic_info()
508 chunk->gpu_timestamp_frequency = rad_info->clock_crystal_freq * 1000; in ac_sqtt_fill_asic_info()
509 chunk->max_shader_core_clock = rad_info->max_gpu_freq_mhz * 1000000; in ac_sqtt_fill_asic_info()
510 chunk->max_memory_clock = rad_info->memory_freq_mhz * 1000000; in ac_sqtt_fill_asic_info()
511 chunk->memory_ops_per_clock = ac_memory_ops_per_clock(rad_info->vram_type); in ac_sqtt_fill_asic_info()
512 chunk->memory_chip_type = ac_vram_type_to_sqtt_memory_type(rad_info->vram_type); in ac_sqtt_fill_asic_info()
513 chunk->lds_granularity = rad_info->lds_encode_granularity; in ac_sqtt_fill_asic_info()
517 chunk->cu_mask[se][sa] = rad_info->cu_mask[se][sa]; in ac_sqtt_fill_asic_info()
596 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_API_INFO; in ac_sqtt_fill_api_info()
597 chunk->header.chunk_id.index = 0; in ac_sqtt_fill_api_info()
598 chunk->header.major_version = 0; in ac_sqtt_fill_api_info()
599 chunk->header.minor_version = 1; in ac_sqtt_fill_api_info()
600 chunk->header.size_in_bytes = sizeof(*chunk); in ac_sqtt_fill_api_info()
602 chunk->api_type = SQTT_API_TYPE_VULKAN; in ac_sqtt_fill_api_info()
603 chunk->major_version = 0; in ac_sqtt_fill_api_info()
604 chunk->minor_version = 0; in ac_sqtt_fill_api_info()
605 chunk->profiling_mode = SQTT_PROFILING_MODE_PRESENT; in ac_sqtt_fill_api_info()
606 chunk->instruction_trace_mode = SQTT_INSTRUCTION_TRACE_DISABLED; in ac_sqtt_fill_api_info()
626 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_CODE_OBJECT_DATABASE; in ac_sqtt_fill_code_object()
627 chunk->header.chunk_id.index = 0; in ac_sqtt_fill_code_object()
628 chunk->header.major_version = 0; in ac_sqtt_fill_code_object()
629 chunk->header.minor_version = 0; in ac_sqtt_fill_code_object()
630 chunk->header.size_in_bytes = chunk_size; in ac_sqtt_fill_code_object()
631 chunk->offset = file_offset; in ac_sqtt_fill_code_object()
632 chunk->flags = 0; in ac_sqtt_fill_code_object()
633 chunk->size = chunk_size; in ac_sqtt_fill_code_object()
634 chunk->record_count = rgp_code_object->record_count; in ac_sqtt_fill_code_object()
658 chunk->header.chunk_id.type = in ac_sqtt_fill_loader_events()
660 chunk->header.chunk_id.index = 0; in ac_sqtt_fill_loader_events()
661 chunk->header.major_version = 1; in ac_sqtt_fill_loader_events()
662 chunk->header.minor_version = 0; in ac_sqtt_fill_loader_events()
663 chunk->header.size_in_bytes = (rgp_loader_events->record_count * in ac_sqtt_fill_loader_events()
666 chunk->offset = file_offset; in ac_sqtt_fill_loader_events()
667 chunk->flags = 0; in ac_sqtt_fill_loader_events()
668 chunk->record_size = sizeof(struct sqtt_code_object_loader_events_record); in ac_sqtt_fill_loader_events()
669 chunk->record_count = rgp_loader_events->record_count; in ac_sqtt_fill_loader_events()
690 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_PSO_CORRELATION; in ac_sqtt_fill_pso_correlation()
691 chunk->header.chunk_id.index = 0; in ac_sqtt_fill_pso_correlation()
692 chunk->header.major_version = 0; in ac_sqtt_fill_pso_correlation()
693 chunk->header.minor_version = 0; in ac_sqtt_fill_pso_correlation()
694 chunk->header.size_in_bytes = (rgp_pso_correlation->record_count * in ac_sqtt_fill_pso_correlation()
697 chunk->offset = file_offset; in ac_sqtt_fill_pso_correlation()
698 chunk->flags = 0; in ac_sqtt_fill_pso_correlation()
699 chunk->record_size = sizeof(struct sqtt_pso_correlation_record); in ac_sqtt_fill_pso_correlation()
700 chunk->record_count = rgp_pso_correlation->record_count; in ac_sqtt_fill_pso_correlation()
745 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_SQTT_DESC; in ac_sqtt_fill_sqtt_desc()
746 chunk->header.chunk_id.index = chunk_index; in ac_sqtt_fill_sqtt_desc()
747 chunk->header.major_version = 0; in ac_sqtt_fill_sqtt_desc()
748 chunk->header.minor_version = 2; in ac_sqtt_fill_sqtt_desc()
749 chunk->header.size_in_bytes = sizeof(*chunk); in ac_sqtt_fill_sqtt_desc()
751 chunk->sqtt_version = in ac_sqtt_fill_sqtt_desc()
752 ac_gfx_level_to_sqtt_version(info->gfx_level); in ac_sqtt_fill_sqtt_desc()
753 chunk->shader_engine_index = shader_engine_index; in ac_sqtt_fill_sqtt_desc()
754 chunk->v1.instrumentation_spec_version = 1; in ac_sqtt_fill_sqtt_desc()
755 chunk->v1.instrumentation_api_version = 0; in ac_sqtt_fill_sqtt_desc()
756 chunk->v1.compute_unit_index = compute_unit_index; in ac_sqtt_fill_sqtt_desc()
774 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_SQTT_DATA; in ac_sqtt_fill_sqtt_data()
775 chunk->header.chunk_id.index = chunk_index; in ac_sqtt_fill_sqtt_data()
776 chunk->header.major_version = 0; in ac_sqtt_fill_sqtt_data()
777 chunk->header.minor_version = 0; in ac_sqtt_fill_sqtt_data()
778 chunk->header.size_in_bytes = sizeof(*chunk) + size; in ac_sqtt_fill_sqtt_data()
780 chunk->offset = sizeof(*chunk) + offset; in ac_sqtt_fill_sqtt_data()
781 chunk->size = size; in ac_sqtt_fill_sqtt_data()
828 rgp_queue_info->record_count * sizeof(struct sqtt_queue_info_record); in ac_sqtt_fill_queue_event_timings()
830 rgp_queue_event->record_count * sizeof(struct sqtt_queue_event_record); in ac_sqtt_fill_queue_event_timings()
832 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_QUEUE_EVENT_TIMINGS; in ac_sqtt_fill_queue_event_timings()
833 chunk->header.chunk_id.index = 0; in ac_sqtt_fill_queue_event_timings()
834 chunk->header.major_version = 1; in ac_sqtt_fill_queue_event_timings()
835 chunk->header.minor_version = 1; in ac_sqtt_fill_queue_event_timings()
836 chunk->header.size_in_bytes = queue_info_size + queue_event_size + in ac_sqtt_fill_queue_event_timings()
839 chunk->queue_info_table_record_count = rgp_queue_info->record_count; in ac_sqtt_fill_queue_event_timings()
840 chunk->queue_info_table_size = queue_info_size; in ac_sqtt_fill_queue_event_timings()
841 chunk->queue_event_table_record_count = rgp_queue_event->record_count; in ac_sqtt_fill_queue_event_timings()
842 chunk->queue_event_table_size = queue_event_size; in ac_sqtt_fill_queue_event_timings()
862 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_CLOCK_CALIBRATION; in ac_sqtt_fill_clock_calibration()
863 chunk->header.chunk_id.index = chunk_index; in ac_sqtt_fill_clock_calibration()
864 chunk->header.major_version = 0; in ac_sqtt_fill_clock_calibration()
865 chunk->header.minor_version = 0; in ac_sqtt_fill_clock_calibration()
866 chunk->header.size_in_bytes = sizeof(*chunk); in ac_sqtt_fill_clock_calibration()
897 * SQTT SPM DB info.
922 chunk->header.chunk_id.type = SQTT_FILE_CHUNK_TYPE_SPM_DB; in ac_sqtt_fill_spm_db()
923 chunk->header.chunk_id.index = 0; in ac_sqtt_fill_spm_db()
924 chunk->header.major_version = 1; in ac_sqtt_fill_spm_db()
925 chunk->header.minor_version = 3; in ac_sqtt_fill_spm_db()
926 chunk->header.size_in_bytes = chunk_size; in ac_sqtt_fill_spm_db()
928 chunk->flags = 0; in ac_sqtt_fill_spm_db()
929 chunk->num_timestamps = num_samples; in ac_sqtt_fill_spm_db()
930 chunk->num_spm_counter_info = spm_trace->num_counters; in ac_sqtt_fill_spm_db()
931 chunk->sample_interval = spm_trace->sample_interval; in ac_sqtt_fill_spm_db()
940 uint8_t *spm_data_ptr = (uint8_t *)spm_trace->ptr; in ac_sqtt_dump_spm()
965 spm_trace->num_counters * sizeof(struct sqtt_spm_counter_info); in ac_sqtt_dump_spm()
967 for (uint32_t c = 0; c < spm_trace->num_counters; c++) { in ac_sqtt_dump_spm()
969 .block = spm_trace->counters[c].gpu_block, in ac_sqtt_dump_spm()
970 .instance = spm_trace->counters[c].instance, in ac_sqtt_dump_spm()
972 .event_index = spm_trace->counters[c].event_id, in ac_sqtt_dump_spm()
985 for (uint32_t c = 0; c < spm_trace->num_counters; c++) { in ac_sqtt_dump_spm()
986 uint64_t offset = spm_trace->counters[c].offset; in ac_sqtt_dump_spm()
997 /* SQTT SPM DB chunk. */ in ac_sqtt_dump_spm()
999 file_offset - file_spm_db_offset); in ac_sqtt_dump_spm()
1011 struct ac_thread_trace_data *thread_trace_data = thread_trace->data; in ac_sqtt_dump_data()
1018 &thread_trace_data->rgp_code_object; in ac_sqtt_dump_data()
1020 &thread_trace_data->rgp_loader_events; in ac_sqtt_dump_data()
1022 &thread_trace_data->rgp_pso_correlation; in ac_sqtt_dump_data()
1023 struct rgp_queue_info *rgp_queue_info = &thread_trace_data->rgp_queue_info; in ac_sqtt_dump_data()
1024 struct rgp_queue_event *rgp_queue_event = &thread_trace_data->rgp_queue_event; in ac_sqtt_dump_data()
1025 struct rgp_clock_calibration *rgp_clock_calibration = &thread_trace_data->rgp_clock_calibration; in ac_sqtt_dump_data()
1048 if (rgp_code_object->record_count) { in ac_sqtt_dump_data()
1053 uint32_t flags = ac_gfx_level_to_elf_gfxip_level(rad_info->gfx_level); in ac_sqtt_dump_data()
1058 &rgp_code_object->record, list) { in ac_sqtt_dump_data()
1074 file_offset - file_code_object_offset); in ac_sqtt_dump_data()
1081 if (rgp_loader_events->record_count) { in ac_sqtt_dump_data()
1090 &rgp_loader_events->record, list) { in ac_sqtt_dump_data()
1093 file_offset += (rgp_loader_events->record_count * in ac_sqtt_dump_data()
1098 if (rgp_pso_correlation->record_count) { in ac_sqtt_dump_data()
1107 &rgp_pso_correlation->record, list) { in ac_sqtt_dump_data()
1111 file_offset += (rgp_pso_correlation->record_count * in ac_sqtt_dump_data()
1116 if (rgp_queue_info->record_count || rgp_queue_event->record_count) { in ac_sqtt_dump_data()
1127 &rgp_queue_info->record, list) { in ac_sqtt_dump_data()
1130 file_offset += (rgp_queue_info->record_count * in ac_sqtt_dump_data()
1135 &rgp_queue_event->record, list) { in ac_sqtt_dump_data()
1138 file_offset += (rgp_queue_event->record_count * in ac_sqtt_dump_data()
1143 if (rgp_clock_calibration->record_count) { in ac_sqtt_dump_data()
1147 &rgp_clock_calibration->record, list) { in ac_sqtt_dump_data()
1153 clock_calibration.cpu_timestamp = record->cpu_timestamp; in ac_sqtt_dump_data()
1154 clock_calibration.gpu_timestamp = record->gpu_timestamp; in ac_sqtt_dump_data()
1165 for (unsigned i = 0; i < thread_trace->num_traces; i++) { in ac_sqtt_dump_data()
1166 const struct ac_thread_trace_se *se = &thread_trace->traces[i]; in ac_sqtt_dump_data()
1167 const struct ac_thread_trace_info *info = &se->info; in ac_sqtt_dump_data()
1170 uint64_t size = info->cur_offset * 32; /* unit of 32 bytes */ in ac_sqtt_dump_data()
1173 ac_sqtt_fill_sqtt_desc(rad_info, &desc, i, se->shader_engine, se->compute_unit); in ac_sqtt_dump_data()
1184 fwrite(se->data_ptr, size, 1, output); in ac_sqtt_dump_data()
1199 return -1; in ac_dump_rgp_capture()
1215 return -1; in ac_dump_rgp_capture()