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:
@@ -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}{}
|
||||
};
|
||||
|
||||
|
||||
@@ -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_;
|
||||
};
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user