Support discovery and group management in rdc_lib

The rdc.h is modified for new discovery and grouping APIs.

The RdcGroupSettingsImpl.cc is added to implement the GPU group and
the field group management.

The RdcMetricFetcherImpl.cc is added to fetch the metrics from
rocm_smi_lib. Currently, only support power, memory, GPU utilization,
temperature, GPU clock, total device and device name.

A new example field_value_example.cc is added to demo how to record
the fields and retrieve data from cache.

Change-Id: I57acfa048fe9b3d848e2d441e768b3a63ccae3f8
This commit is contained in:
Bill(Shuzhou) Liu
2020-02-19 15:19:24 -05:00
zatwierdzone przez Chris Freehill
rodzic 85006053ed
commit a5f063f8b3
16 zmienionych plików z 1558 dodań i 170 usunięć
+47 -13
Wyświetl plik
@@ -23,33 +23,67 @@ THE SOFTWARE.
#define RDC_LIB_IMPL_RDCEMBEDDEDHANDLER_H_
#include "rdc_lib/RdcHandler.h"
#include "rdc_lib/RdcGroupSettings.h"
#include "rdc_lib/RdcMetricFetcher.h"
namespace amd {
namespace rdc {
class RdcEmbeddedHandler: public RdcHandler
{
class RdcEmbeddedHandler: public RdcHandler {
public:
rdc_status_t rdc_group_gpu_create(rdc_group_type_t type,
const char* group_name,
rdc_gpu_group_t* p_rdc_group_id) override;
rdc_status_t rdc_group_gpu_add(rdc_gpu_group_t groupId,
uint32_t gpu_index) override;
// Job API
rdc_status_t rdc_job_start_stats(rdc_gpu_group_t groupId,
char job_id[64]) override;
rdc_status_t rdc_watch_job_fields(rdc_gpu_group_t groupId,
uint64_t update_freq, double max_keep_age,
char job_id[64], uint64_t update_freq, double max_keep_age,
uint32_t max_keep_samples) override;
rdc_status_t rdc_job_get_stats(char jobId[64],
rdc_job_info_t* p_job_info) override;
rdc_status_t rdc_job_stop_stats(char job_id[64]) override;
// Discovery API
rdc_status_t rdc_get_all_devices(
uint32_t gpu_index_list[RDC_MAX_NUM_DEVICES], uint32_t* count) override;
rdc_status_t rdc_get_device_attributes(uint32_t gpu_index,
rdc_device_attributes_t* p_rdc_attr) override;
// Group API
rdc_status_t rdc_group_gpu_create(rdc_group_type_t type,
const char* group_name,
rdc_gpu_group_t* p_rdc_group_id) override;
rdc_status_t rdc_group_gpu_add(rdc_gpu_group_t groupId,
uint32_t gpu_index) override;
rdc_status_t rdc_group_field_create(uint32_t num_field_ids,
uint32_t* field_ids, const char* field_group_name,
rdc_field_grp_t* rdc_field_group_id) override;
rdc_status_t rdc_group_field_get_info(
rdc_field_grp_t rdc_field_group_id,
rdc_field_group_info_t* field_group_info) override;
rdc_status_t rdc_group_gpu_get_info(rdc_gpu_group_t p_rdc_group_id,
rdc_group_info_t* p_rdc_group_info) override;
rdc_status_t rdc_group_gpu_destroy(
rdc_gpu_group_t p_rdc_group_id) override;
rdc_status_t rdc_group_field_destroy(
rdc_field_grp_t rdc_field_group_id) override;
// Field API
rdc_status_t rdc_watch_fields(rdc_gpu_group_t group_id,
rdc_field_grp_t field_group_id, uint64_t update_freq,
double max_keep_age, uint32_t max_keep_samples) override;
rdc_status_t rdc_get_latest_value_for_field(uint32_t gpu_index,
uint32_t field, rdc_field_value* value) override;
rdc_status_t rdc_get_field_value_since(uint32_t gpu_index,
uint32_t field, uint64_t since_time_stamp,
uint64_t *next_since_time_stamp, rdc_field_value* value) override;
rdc_status_t rdc_unwatch_fields(rdc_gpu_group_t group_id,
rdc_field_grp_t field_group_id) override;
// Control API
rdc_status_t rdc_update_all_fields(uint32_t wait_for_update) override;
explicit RdcEmbeddedHandler(rdc_operation_mode_t op_mode);
private:
RdcGroupSettingsPtr group_settings_;
RdcMetricFetcherPtr metric_fetcher_;
};
} // namespace rdc