Fix to overlapping VCN and JPEG tracks in perfetto (#192)

- Fix overlapping VCN and JPEG activity values in Perfetto output.
- Modify the storage of the activity values to be more efficient.
Этот коммит содержится в:
Sajina PK
2025-05-01 19:40:49 -04:00
коммит произвёл GitHub
родитель 8ae6651357
Коммит 99a411fe52
2 изменённых файлов: 25 добавлений и 40 удалений
+19 -34
Просмотреть файл
@@ -191,11 +191,11 @@ data::sample(uint32_t _dev_id)
for(const auto& v_activity : _gpu_metrics.vcn_activity)
{
if(v_activity != UINT16_MAX) m_vcn_metrics[_dev_id].push_back(v_activity);
if(v_activity != UINT16_MAX) m_vcn_metrics.push_back(v_activity);
}
for(const auto& j_activity : _gpu_metrics.jpeg_activity)
{
if(j_activity != UINT16_MAX) m_jpeg_metrics[_dev_id].push_back(j_activity);
if(j_activity != UINT16_MAX) m_jpeg_metrics.push_back(j_activity);
}
#undef ROCPROFSYS_AMDSMI_GET
@@ -378,25 +378,15 @@ data::post_process(uint32_t _dev_id)
"megabytes");
if(_settings.vcn_activity)
{
for(const auto& [dev_id, metrics] : itr.m_vcn_metrics)
{
for(std::size_t i = 0; i < std::size(metrics); ++i)
{
counter_track::emplace(
_dev_id, addendum_blk(i, " VCN Activity"), "%");
}
}
for(std::size_t i = 0; i < std::size(itr.m_vcn_metrics); ++i)
counter_track::emplace(_dev_id, addendum_blk(i, " VCN Activity"),
"%");
}
if(_settings.jpeg_activity)
{
for(const auto& [dev_id, metrics] : itr.m_jpeg_metrics)
{
for(std::size_t i = 0; i < std::size(metrics); ++i)
{
counter_track::emplace(_dev_id,
addendum_blk(i, "JPEG Activity"), "%");
}
}
for(std::size_t i = 0; i < std::size(itr.m_jpeg_metrics); ++i)
counter_track::emplace(_dev_id, addendum_blk(i, "JPEG Activity"),
"%");
}
}
uint64_t _ts = itr.m_ts;
@@ -429,28 +419,23 @@ data::post_process(uint32_t _dev_id)
counter_track::at(_dev_id, _idx.at(5)), _ts, _usage);
if(_settings.vcn_activity)
{
for(const auto& [dev_id, metrics] : itr.m_vcn_metrics)
uint64_t idx = _idx.at(6);
for(const auto& temp : itr.m_vcn_metrics)
{
for(std::size_t i = 0; i < std::size(metrics); ++i)
{
double _vcn_activity = metrics[i];
TRACE_COUNTER("device_vcn_activity",
counter_track::at(_dev_id, _idx.at(6) + i), _ts,
_vcn_activity);
}
TRACE_COUNTER("device_vcn_activity", counter_track::at(_dev_id, idx),
_ts, temp);
++idx;
}
}
if(_settings.jpeg_activity)
{
for(const auto& [dev_id, metrics] : itr.m_jpeg_metrics)
uint64_t idx = _idx.at(7);
if(_settings.vcn_activity) idx += (itr.m_vcn_metrics.size() - 1);
for(const auto& temp : itr.m_jpeg_metrics)
{
for(std::size_t i = 0; i < std::size(metrics); ++i)
{
double _jpeg_activity = metrics[i];
TRACE_COUNTER("device_jpeg_activity",
counter_track::at(_dev_id, _idx.at(7) + i), _ts,
_jpeg_activity);
}
TRACE_COUNTER("device_jpeg_activity", counter_track::at(_dev_id, idx),
_ts, temp);
++idx;
}
}
}
+6 -6
Просмотреть файл
@@ -102,12 +102,12 @@ struct data
static void post_process(uint32_t _dev_id);
uint32_t m_dev_id = std::numeric_limits<uint32_t>::max();
timestamp_t m_ts = 0;
temp_t m_temp = 0;
mem_usage_t m_mem_usage = 0;
std::unordered_map<uint32_t, std::vector<double>> m_vcn_metrics = {};
std::unordered_map<uint32_t, std::vector<double>> m_jpeg_metrics = {};
uint32_t m_dev_id = std::numeric_limits<uint32_t>::max();
timestamp_t m_ts = 0;
temp_t m_temp = 0;
mem_usage_t m_mem_usage = 0;
std::vector<uint16_t> m_vcn_metrics = {};
std::vector<uint16_t> m_jpeg_metrics = {};
#if ROCPROFSYS_USE_ROCM > 0
amdsmi_engine_usage_t m_busy_perc = {};
amdsmi_power_info_t m_power = {};