From ce475b009c1ecebeb63ccfa1b2c0300ca79f710d Mon Sep 17 00:00:00 2001 From: Chris Freehill Date: Wed, 24 Feb 2021 11:02:17 -0600 Subject: [PATCH] Adjust event counters to report only new events Previously, RSMI assumed that the event counter values returned from perf were only new events. But in fact, when we read the counter values, they are running totals. To account for this, we now record the value we read and take the difference between the current value and the previously recorded value. Change-Id: I1e04b514e89c7c4d4719889f2dae3a1283864e7f --- include/rocm_smi/rocm_smi_counters.h | 2 +- src/rocm_smi_counters.cc | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/rocm_smi/rocm_smi_counters.h b/include/rocm_smi/rocm_smi_counters.h index 3d6addb2e2..091c89d90d 100755 --- a/include/rocm_smi/rocm_smi_counters.h +++ b/include/rocm_smi/rocm_smi_counters.h @@ -110,7 +110,7 @@ class Event { uint32_t dev_ind_; int32_t fd_; perf_event_attr attr_; - + uint64_t prev_cntr_val_; int32_t get_event_file_info(void); int32_t get_event_type(uint32_t *ev_type); }; diff --git a/src/rocm_smi_counters.cc b/src/rocm_smi_counters.cc index cb58cc3d32..9f82798183 100755 --- a/src/rocm_smi_counters.cc +++ b/src/rocm_smi_counters.cc @@ -164,7 +164,7 @@ GetSupportedEventGroups(uint32_t dev_num, dev_evt_grp_set_t *supported_grps) { } // /sys/bus/event_source/devices/_/type Event::Event(rsmi_event_type_t event, uint32_t dev_ind) : - event_type_(event) { + event_type_(event), prev_cntr_val_(0) { fd_ = -1; rsmi_event_group_t grp = EvtGrpFromEvtID(event); assert(grp != RSMI_EVNT_GRP_INVALID); // This should have failed before now @@ -425,7 +425,8 @@ amd::smi::evt::Event::getValue(rsmi_counter_value_t *val) { return EIO; } - val->value = pvalue.value; + val->value = pvalue.value - prev_cntr_val_; + prev_cntr_val_ = pvalue.value; val->time_enabled = pvalue.enabled_time; val->time_running = pvalue.run_time;