Use Internal Correlation ID values for Kernel Rename Feature (#397)
* Updated kernel rename service to use internal correaltion IDs for external correlation IDs and kernel rename values * Updated for review comments * Changed if-condition in generateJSON.cpp to check if string view is empty before calling get_entry
This commit is contained in:
committed by
GitHub
orang tua
7166b1ab58
melakukan
afb27f3f1a
@@ -137,12 +137,12 @@ write_json(json_output& json_ar,
|
||||
auto _extern_corr_id_strings = std::map<size_t, std::string>{};
|
||||
if(cfg.kernel_rename)
|
||||
{
|
||||
for(auto itr : tool_metadata.external_corr_ids.get())
|
||||
for(const auto& itr : tool_metadata.kernel_rename_map.get())
|
||||
{
|
||||
if(itr > 0)
|
||||
if(!itr.first.empty())
|
||||
{
|
||||
const auto* _str = tool_metadata.get_string_entry(itr);
|
||||
if(_str) _extern_corr_id_strings.emplace(itr, *_str);
|
||||
const auto* _str = common::get_string_entry(itr.first);
|
||||
if(_str) _extern_corr_id_strings.emplace(itr.second, *_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -496,6 +496,17 @@ metadata::add_runtime_initialization(rocprofiler_runtime_initialization_operatio
|
||||
runtime_op);
|
||||
}
|
||||
|
||||
uint64_t
|
||||
metadata::add_kernel_rename_val(std::string_view rename_string, uint64_t internal_corr_id)
|
||||
{
|
||||
return kernel_rename_map.wlock(
|
||||
[](auto& _data, std::string_view _str, uint64_t _val) {
|
||||
return _data.emplace(_str, _val).first->second;
|
||||
},
|
||||
rename_string,
|
||||
internal_corr_id);
|
||||
}
|
||||
|
||||
bool
|
||||
metadata::is_runtime_initialized(rocprofiler_runtime_initialization_operation_t runtime_op) const
|
||||
{
|
||||
@@ -534,9 +545,17 @@ metadata::get_marker_message(uint64_t corr_id) const
|
||||
std::string_view
|
||||
metadata::get_kernel_name(uint64_t kernel_id, uint64_t rename_id) const
|
||||
{
|
||||
if(rename_id > 0)
|
||||
auto string_entry = kernel_rename_map.rlock(
|
||||
[](auto& _data, uint64_t _val) {
|
||||
for(const auto& itr : _data)
|
||||
if(itr.second == _val) return itr.first;
|
||||
return std::string_view{};
|
||||
},
|
||||
rename_id);
|
||||
if(!string_entry.empty())
|
||||
{
|
||||
if(const auto* _name = common::get_string_entry(rename_id)) return std::string_view{*_name};
|
||||
if(const auto* _name = common::get_string_entry(string_entry))
|
||||
return std::string_view{*_name};
|
||||
}
|
||||
|
||||
const auto* _kernel_data = get_kernel_symbol(kernel_id);
|
||||
|
||||
@@ -93,6 +93,7 @@ using synced_obj = common::Synchronized<Tp, true>;
|
||||
using pc_sampling_stats_t = rocprofiler_tool_pc_sampling_stats;
|
||||
using runtime_initialization_set_t =
|
||||
std::unordered_set<rocprofiler_runtime_initialization_operation_t>;
|
||||
using kernel_rename_map_t = std::unordered_map<std::string_view, uint64_t>;
|
||||
|
||||
enum class agent_indexing
|
||||
{
|
||||
@@ -139,6 +140,7 @@ struct metadata
|
||||
synced_map<external_corr_id_set_t> external_corr_ids = {};
|
||||
synced_map<host_function_info_map_t> host_functions = {};
|
||||
synced_map<code_object_load_info_vec_t> code_object_load = {};
|
||||
synced_map<kernel_rename_map_t> kernel_rename_map = {};
|
||||
att_filenames_map_t att_filenames = {};
|
||||
synced_obj<pc_sampling_stats_t> pc_sampling_stats = {};
|
||||
synced_obj<runtime_initialization_set_t> runtime_initialization_set = {};
|
||||
@@ -183,13 +185,14 @@ struct metadata
|
||||
template <typename Tp>
|
||||
Tp get_marker_messages(Tp&&);
|
||||
|
||||
bool add_marker_message(uint64_t corr_id, std::string&& msg);
|
||||
bool add_code_object(code_object_info obj);
|
||||
bool add_kernel_symbol(kernel_symbol_info&& sym);
|
||||
bool add_host_function(host_function_info&& func);
|
||||
bool add_string_entry(size_t key, std::string_view str);
|
||||
bool add_external_correlation_id(uint64_t);
|
||||
bool add_runtime_initialization(rocprofiler_runtime_initialization_operation_t);
|
||||
bool add_marker_message(uint64_t corr_id, std::string&& msg);
|
||||
bool add_code_object(code_object_info obj);
|
||||
bool add_kernel_symbol(kernel_symbol_info&& sym);
|
||||
bool add_host_function(host_function_info&& func);
|
||||
bool add_string_entry(size_t key, std::string_view str);
|
||||
bool add_external_correlation_id(uint64_t);
|
||||
bool add_runtime_initialization(rocprofiler_runtime_initialization_operation_t);
|
||||
uint64_t add_kernel_rename_val(std::string_view, uint64_t);
|
||||
|
||||
void set_process_id(pid_t _pid,
|
||||
pid_t _ppid = 0,
|
||||
|
||||
@@ -569,19 +569,24 @@ kernel_rename_callback(rocprofiler_callback_tracing_record_t record,
|
||||
{
|
||||
auto* marker_data =
|
||||
static_cast<rocprofiler_callback_tracing_marker_api_data_t*>(record.payload);
|
||||
auto add_message = [](std::string_view val) {
|
||||
auto _hash_v = common::add_string_entry(val);
|
||||
return std::string_view{*common::get_string_entry(_hash_v)};
|
||||
};
|
||||
|
||||
if(record.operation == ROCPROFILER_MARKER_CORE_API_ID_roctxMarkA &&
|
||||
record.phase == ROCPROFILER_CALLBACK_PHASE_EXIT && marker_data->args.roctxMarkA.message)
|
||||
{
|
||||
thread_dispatch_rename->emplace(
|
||||
common::add_string_entry(marker_data->args.roctxMarkA.message));
|
||||
thread_dispatch_rename->emplace(tool_metadata->add_kernel_rename_val(
|
||||
add_message(marker_data->args.roctxMarkA.message), record.correlation_id.internal));
|
||||
}
|
||||
else if(record.operation == ROCPROFILER_MARKER_CORE_API_ID_roctxRangePushA &&
|
||||
record.phase == ROCPROFILER_CALLBACK_PHASE_EXIT &&
|
||||
marker_data->args.roctxRangePushA.message)
|
||||
{
|
||||
thread_dispatch_rename->emplace(
|
||||
common::add_string_entry(marker_data->args.roctxRangePushA.message));
|
||||
thread_dispatch_rename->emplace(tool_metadata->add_kernel_rename_val(
|
||||
add_message(marker_data->args.roctxRangePushA.message),
|
||||
record.correlation_id.internal));
|
||||
}
|
||||
else if(record.operation == ROCPROFILER_MARKER_CORE_API_ID_roctxRangePop &&
|
||||
record.phase == ROCPROFILER_CALLBACK_PHASE_ENTER)
|
||||
|
||||
Reference in New Issue
Block a user