Support watch() and unwatch() in RDC module framework

The framework now supports watch() and unwatch(), which can be used
by the telemetry library to init events or pre-fetch fields when recording
starts.
* A new header file RdcTelemetryLibInterface.h is defined for library to
  include it.
* The RdcWatchTable will not talk to RdcMetricFetcher directly anymore.
  It will call the framework watch/unwatch to dispatch it to the libraries.
* Make the python binding consistent with the current code.

Change-Id: Ie5731d920ed5928f901369d60c23bd450807a562
This commit is contained in:
Bill(Shuzhou) Liu
2020-09-15 14:53:04 -04:00
parent a80454b35d
commit 151520b97e
13 changed files with 266 additions and 80 deletions
+2 -1
View File
@@ -24,6 +24,7 @@ THE SOFTWARE.
#include <mutex> // NOLINT(build/c++11)
#include <future> // NOLINT(build/c++11)
#include <memory>
#include <condition_variable> // NOLINT(build/c++11)
#include <map>
#include <queue>
@@ -54,7 +55,7 @@ struct FieldRSMIData {
union {
rsmi_counter_value_t counter_val;
};
~FieldRSMIData(){}
~FieldRSMIData() {}
FieldRSMIData() : evt_handle(0), counter_val{0, 0, 0}{}
};
+3
View File
@@ -61,6 +61,9 @@ class RdcRasLib: public RdcTelemetry {
uint32_t, rdc_field_value_f, void*);
rdc_status_t (*fields_query_)(uint32_t[MAX_NUM_FIELDS], uint32_t*);
rdc_status_t (*fields_watch_)(rdc_gpu_field_t*, uint32_t);
rdc_status_t (*fields_unwatch_)(rdc_gpu_field_t*, uint32_t);
rdc_status_t (*rdc_module_init_)(uint64_t);
rdc_status_t (*rdc_module_destroy_)();
};
@@ -24,6 +24,7 @@ THE SOFTWARE.
#include <map>
#include <list>
#include <vector>
#include <memory>
#include "rdc_lib/RdcTelemetry.h"
#include "rdc_lib/impl/RdcRasLib.h"
@@ -49,7 +50,15 @@ class RdcTelemetryModule : public RdcTelemetry {
RdcTelemetryModule(const RdcMetricFetcherPtr& fetcher,
const RdcRasLibPtr& ras_module);
private:
//< Helper function to dispatch fields to module
void get_fields_for_module(
rdc_gpu_field_t* fields,
uint32_t fields_count,
std::map<RdcTelemetryPtr, std::vector<rdc_gpu_field_t>>
& fields_in_module,
std::vector<rdc_gpu_field_value_t>& unsupport_fields); // NOLINT
std::list<RdcTelemetryPtr> telemetry_modules_;
std::map<uint32_t, RdcTelemetryPtr> fields_id_module_;
};
-3
View File
@@ -83,10 +83,8 @@ class RdcWatchTableImpl : public RdcWatchTable {
//!< once per second.
rdc_status_t rdc_field_update_all() override;
// TODO(bill_liu): Remove the RdcMetricFetcherPtr
RdcWatchTableImpl(const RdcGroupSettingsPtr& group_settings,
const RdcCacheManagerPtr& cache_mgr,
const RdcMetricFetcherPtr& metric_fetcher,
const RdcModuleMgrPtr& module_mgr);
private:
@@ -116,7 +114,6 @@ class RdcWatchTableImpl : public RdcWatchTable {
RdcGroupSettingsPtr group_settings_;
RdcCacheManagerPtr cache_mgr_;
RdcMetricFetcherPtr metric_fetcher_;
RdcModuleMgrPtr rdc_module_mgr_;
//!< The watch table to store the watch settings.