Fixing Timestamps for Tracing for the trace buffer results

Change-Id: I89b36daacb6531840ac334ba4629c73a7b8f1e79
Tá an tiomantas seo le fáil i:
Ammar ELWazir
2023-05-23 19:01:16 +00:00
tuismitheoir 1bba393b1b
tiomantas 6b07b139c4
D'athraigh 15 comhad le 489 breiseanna agus 586 scriosta
+49 -60
Féach ar an gComhad
@@ -198,46 +198,53 @@ class file_plugin_t {
void FlushTracerRecord(rocprofiler_record_tracer_t tracer_record,
rocprofiler_session_id_t session_id,
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data,
rocprofiler_buffer_id_t buffer_id = rocprofiler_buffer_id_t{0}){
rocprofiler_buffer_id_t buffer_id = rocprofiler_buffer_id_t{0}) {
std::lock_guard<std::mutex> lock(writing_lock);
if (tracer_record.timestamps.end.value <= 0 && tracer_record.domain != ACTIVITY_DOMAIN_ROCTX)
return;
std::string kernel_name;
std::string function_name;
std::string roctx_message;
uint64_t roctx_id;
if ((tracer_record.operation_id.id == 0 && tracer_record.domain == ACTIVITY_DOMAIN_HIP_OPS)) {
if (tracer_record.api_data_handle.handle &&
strlen(reinterpret_cast<const char*>(tracer_record.api_data_handle.handle)) > 1)
kernel_name = rocmtools::cxx_demangle(
reinterpret_cast<const char*>(tracer_record.api_data_handle.handle));
if (tracer_record.name) {
if (tracer_record.domain == ACTIVITY_DOMAIN_HIP_API)
kernel_name = rocmtools::cxx_demangle(tracer_record.name);
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) roctx_message = tracer_record.name;
}
size_t function_name_size = 0;
char* function_name_c = nullptr;
if (tracer_record.domain == ACTIVITY_DOMAIN_HSA_API) {
if (tracer_extra_data.function_name)
function_name = std::string(tracer_extra_data.function_name);
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info_size(
rocprofiler_session_id_t{0}, ROCPROFILER_HSA_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_size));
function_name_c = new char[function_name_size];
if (function_name_size > 1) {
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info(
rocprofiler_session_id_t{0}, ROCPROFILER_HSA_FUNCTION_NAME,
tracer_record.api_data_handle, tracer_record.operation_id, &function_name_c));
}
}
if (tracer_record.domain == ACTIVITY_DOMAIN_HIP_API) {
if (tracer_extra_data.kernel_name)
kernel_name = rocmtools::cxx_demangle(std::string(tracer_extra_data.kernel_name));
if(tracer_extra_data.function_name)
function_name = std::string(tracer_extra_data.function_name);
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info_size(
rocprofiler_session_id_t{0}, ROCPROFILER_HIP_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_size));
if (function_name_size > 1) {
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info(
rocprofiler_session_id_t{0}, ROCPROFILER_HIP_FUNCTION_NAME,
tracer_record.api_data_handle, tracer_record.operation_id, &function_name_c));
}
}
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) {
const char* roctx_msg = reinterpret_cast<const char*>(tracer_record.api_data_handle.handle);
if(roctx_msg)
roctx_message = rocmtools::cxx_demangle(std::string(roctx_msg));
roctx_id = tracer_record.operation_id.id;
}
// return;
output_file_t* output_file = get_output_file(output_type_t::TRACER, tracer_record.domain);
*output_file << "Record(" << tracer_record.header.id.handle << "), Domain("
<< GetDomainName(tracer_record.domain) << "),";
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX && roctx_id >= 0)
*output_file << " ROCTX_ID(" << roctx_id << "),";
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX && roctx_message.size() > 1)
*output_file << " ROCTX_Message(" << roctx_message << "),";
if (function_name.size() > 1) *output_file << " Function(" << function_name << "),";
*output_file << " ROCTX_ID(" << tracer_record.operation_id.id << "),";
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX && tracer_record.name)
*output_file << " ROCTX_Message(" << reinterpret_cast<const char*>(tracer_record.name)
<< "),";
if (function_name_c) *output_file << " Function(" << function_name_c << "),";
if (kernel_name.size() > 1) *output_file << " Kernel_Name(" << kernel_name.c_str() << "),";
if (tracer_record.domain == ACTIVITY_DOMAIN_HSA_OPS || tracer_record.domain == ACTIVITY_DOMAIN_HIP_OPS) {
if (tracer_record.domain == ACTIVITY_DOMAIN_HSA_OPS ||
tracer_record.domain == ACTIVITY_DOMAIN_HIP_OPS) {
switch (tracer_record.operation_id.id) {
case 0:
*output_file << " Operation(DISPATCH_OP),";
@@ -252,27 +259,12 @@ class file_plugin_t {
break;
}
}
if (tracer_record.phase == ROCPROFILER_PHASE_NONE) {
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) {
*output_file << " timestamp(" << tracer_record.timestamps.begin.value << "),";
} else if (tracer_record.phase == ROCPROFILER_PHASE_EXIT ||
tracer_record.phase == ROCPROFILER_PHASE_NONE) {
*output_file << " Begin(" << tracer_record.timestamps.begin.value << "), End("
<< tracer_record.timestamps.end.value << "),";
} else {
if (tracer_record.phase == ROCPROFILER_PHASE_ENTER &&
tracer_record.domain != ACTIVITY_DOMAIN_ROCTX) {
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
*output_file << " Begin(" << timestamp.value << "),";
}
if (tracer_record.phase == ROCPROFILER_PHASE_ENTER &&
tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) {
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
*output_file << " timestamp(" << timestamp.value << "),";
}
if (tracer_record.phase == ROCPROFILER_PHASE_EXIT) {
rocprofiler_timestamp_t timestamp;
rocprofiler_get_timestamp(&timestamp);
*output_file << " End(" << timestamp.value << "),";
}
}
*output_file << " Correlation_ID(" << tracer_record.correlation_id.value << ")";
*output_file << std::endl;
@@ -382,11 +374,9 @@ class file_plugin_t {
break;
}
case ROCPROFILER_TRACER_RECORD: {
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data;
tracer_extra_data.function_name = nullptr;
rocprofiler_record_tracer_t* tracer_record = const_cast<rocprofiler_record_tracer_t*>(
reinterpret_cast<const rocprofiler_record_tracer_t*>(begin));
FlushTracerRecord(*tracer_record, session_id, tracer_extra_data, buffer_id);
FlushTracerRecord(*tracer_record, session_id, buffer_id);
break;
}
case ROCPROFILER_ATT_TRACER_RECORD: {
@@ -406,16 +396,16 @@ class file_plugin_t {
return 0;
}
bool is_valid() const { return valid_; }
bool is_valid() const { return valid_; }
private:
bool valid_{false};
private:
bool valid_{false};
output_file_t roctx_file_{"roctx_trace.txt"}, hsa_api_file_{"hsa_api_trace.txt"},
hip_api_file_{"hip_api_trace.txt"}, hip_activity_file_{"hcc_ops_trace.txt"},
hsa_async_copy_file_{"async_copy_trace.txt"}, pc_sample_file_{"pcs_trace.txt"},
output_file_{"results.txt"};
};
output_file_t roctx_file_{"roctx_trace.txt"}, hsa_api_file_{"hsa_api_trace.txt"},
hip_api_file_{"hip_api_trace.txt"}, hip_activity_file_{"hcc_ops_trace.txt"},
hsa_async_copy_file_{"async_copy_trace.txt"}, pc_sample_file_{"pcs_trace.txt"},
output_file_{"results.txt"};
};
file_plugin_t* file_plugin = nullptr;
@@ -432,7 +422,7 @@ ROCPROFILER_EXPORT int rocprofiler_plugin_initialize(uint32_t rocprofiler_major_
file_plugin = new file_plugin_t();
if (file_plugin->is_valid()) return 0;
// The plugin failed to initialied, destroy it and return an error.
// The plugin failed to initialized, destroy it and return an error.
delete file_plugin;
file_plugin = nullptr;
return -1;
@@ -451,10 +441,9 @@ ROCPROFILER_EXPORT int rocprofiler_plugin_write_buffer_records(
return file_plugin->WriteBufferRecords(begin, end, session_id, buffer_id);
}
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(rocprofiler_record_tracer_t record,
rocprofiler_plugin_tracer_extra_data_t tracer_extra_data){
ROCPROFILER_EXPORT int rocprofiler_plugin_write_record(rocprofiler_record_tracer_t record) {
if (!file_plugin || !file_plugin->is_valid()) return -1;
if (record.header.id.handle == 0) return 0;
file_plugin->FlushTracerRecord(record, rocprofiler_session_id_t{0}, tracer_extra_data, rocprofiler_buffer_id_t{0});
file_plugin->FlushTracerRecord(record, rocprofiler_session_id_t{0}, rocprofiler_buffer_id_t{0});
return 0;
}