Skip to content

Commit

Permalink
RVS - Report test progress in realtime
Browse files Browse the repository at this point in the history
Change-Id: Id9fea71f242f372f408ecd777c030465b7ef9989
Signed-off-by: Galantsev, Dmitrii <[email protected]>
  • Loading branch information
dmitrii-galantsev committed Nov 7, 2024
1 parent 9c77312 commit 37ddd5b
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 41 deletions.
49 changes: 47 additions & 2 deletions include/rdc_modules/rdc_rvs/RvsBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,60 @@ THE SOFTWARE.
#define RDC_MODULES_RDC_RVS_RVSBASE_H_

#include <cstddef>
#include <cstdio>
#include <string>

#include "rdc/rdc.h"
#include "rvs/rvs.h"

namespace amd {
namespace rdc {

void session_callback(rvs_session_id_t session_id, const rvs_results_t* results);
class RdcRVSBase {
public:
RdcRVSBase() { s_instance = this; };
~RdcRVSBase() {
if (s_instance == this) {
s_instance = nullptr;
}
};

rvs_status_t run_rvs_app(const char* config, size_t config_size);
// only one instance allowed
RdcRVSBase(const RdcRVSBase&) = delete;
RdcRVSBase& operator=(const RdcRVSBase&) = delete;

// no moving allowed
RdcRVSBase(RdcRVSBase&&) = delete;
RdcRVSBase& operator=(RdcRVSBase&&) = delete;

rvs_status_t run_rvs_app(const char* config, size_t config_size, cookie_t* cookie);

private:
static RdcRVSBase* s_instance;
volatile rvs_session_state_t _state = RVS_SESSION_STATE_IDLE;
cookie_t* _cookie = nullptr;
rvs_session_callback _rvs_callback = nullptr;

// Static callback function that the C API will call
static void static_callback(rvs_session_id_t session_id, const rvs_results_t* results) {
// Forward the call to the current instance if it exists
if (s_instance) {
s_instance->session_callback(session_id, results);
}
}
void session_callback(rvs_session_id_t session_id, const rvs_results_t* results) {
_state = results->state;
// std::string output = "\n";
// output += "session id -> " + std::to_string(session_id) + "\n";
// output += " state -> " + std::to_string(results->state) + "\n";
// output += " status -> " + std::to_string(results->status) + "\n";
// output += " output -> " + std::string(results->output_log);
std::string output = std::string(results->output_log);
if (_cookie != nullptr && _cookie->callback != nullptr && _cookie->writer != nullptr) {
_cookie->callback(_cookie->writer, output.data());
}
}
};
} // namespace rdc
} // namespace amd

Expand Down
3 changes: 1 addition & 2 deletions rdc_libs/rdc_client/src/RdcStandaloneHandler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -578,8 +578,7 @@ rdc_status_t RdcStandaloneHandler::rdc_diagnostic_run(rdc_gpu_group_t group_id,
// * response - delivered when the diagnostic run completes
while (reader->Read(&reply)) {
if (reply.has_log()) {
// TODO: Remove cout?
RDC_LOG(RDC_INFO, "LOG: " << reply.log());
// TODO: Add different logging levels
std::cout << "LOG: " << reply.log() << std::endl;
continue;
}
Expand Down
25 changes: 10 additions & 15 deletions rdc_libs/rdc_modules/rdc_rvs/RdcDiagnosticLib.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,12 @@ THE SOFTWARE.
#include "rdc_lib/rdc_common.h"
#include "rdc_modules/rdc_rvs/RvsBase.h"

// TODO: Replace with client-side feedback channel
#define RVS_LOG() RDC_LOG(RDC_DEBUG, "!HELLO_FROM_RVS! " << __FILE__ << ":" << __LINE__)
rdc_status_t rdc_diag_init(uint64_t) { return RDC_ST_OK; }

rdc_status_t rdc_diag_init(uint64_t) {
RVS_LOG();
return RDC_ST_OK;
}

rdc_status_t rdc_diag_destroy() {
RVS_LOG();
return RDC_ST_OK;
}
rdc_status_t rdc_diag_destroy() { return RDC_ST_OK; }

rdc_status_t rdc_diag_test_cases_query(rdc_diag_test_cases_t test_cases[MAX_TEST_CASES],
uint32_t* test_case_count) {
RVS_LOG();
if (test_case_count == nullptr) {
return RDC_ST_BAD_PARAMETER;
}
Expand All @@ -59,7 +49,6 @@ rdc_status_t rdc_diag_test_case_run(rdc_diag_test_cases_t test_case,
const char* config, size_t config_size,
rdc_diag_test_result_t* result, rdc_diag_callback_t* callback) {
rvs_status_t rvs_status = RVS_STATUS_SUCCESS;
RVS_LOG();
if (result == nullptr || gpu_count == 0) {
return RDC_ST_BAD_PARAMETER;
}
Expand All @@ -68,16 +57,22 @@ rdc_status_t rdc_diag_test_case_run(rdc_diag_test_cases_t test_case,
return RDC_ST_BAD_PARAMETER;
}

amd::rdc::RdcRVSBase rvs_base;

// init the return data
*result = {};
result->test_case = test_case;
result->status = RDC_DIAG_RESULT_PASS;
result->per_gpu_result_count = 0;

if (cookie != nullptr && cookie->callback != nullptr && cookie->writer != nullptr) {
std::string str = "RVS test";
cookie->callback(cookie->writer, str.data());
}
switch (test_case) {
case RDC_DIAG_RVS_TEST:
strncpy_with_null(result->info, "Finished running RDC_DIAG_RVS_TEST!", MAX_DIAG_MSG_LENGTH);
rvs_status = amd::rdc::run_rvs_app(config, config_size);
strncpy_with_null(result->info, "Finished running RDC_DIAG_RVS_TEST", MAX_DIAG_MSG_LENGTH);
rvs_status = rvs_base.run_rvs_app(config, config_size, cookie);
break;
default:
result->status = RDC_DIAG_RESULT_SKIP;
Expand Down
34 changes: 12 additions & 22 deletions rdc_libs/rdc_modules/rdc_rvs/RvsBase.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,23 @@ THE SOFTWARE.

#include "rdc_lib/RdcLogger.h"
#include "rdc_lib/rdc_common.h"
#include "rdc_modules/rdc_rvs/RvsBase.h"
#include "rvs/rvs.h"

// TODO: Make generic test
// TODO: Allow for user to override defaults with a custom string
static constexpr size_t MAX_CONFIG_LENGTH = 1024;

volatile rvs_session_state_t state = RVS_SESSION_STATE_IDLE;
amd::rdc::RdcRVSBase* amd::rdc::RdcRVSBase::s_instance = nullptr;

rvs_status_t amd::rdc::run_rvs_app(const char* config, const size_t config_size) {
rvs_status_t amd::rdc::RdcRVSBase::run_rvs_app(const char* config, const size_t config_size,
cookie_t* cookie) {
char active_config[MAX_CONFIG_LENGTH];
rvs_session_property_t session_property = {RVS_SESSION_TYPE_DEFAULT_CONF, {{RVS_MODULE_GST}}};
rvs_session_id_t session_id;
rvs_status_t status;
// NOTE: device_index is NOT set by RDC unless a custom config is provided.
// Meaning RDC index has no impact on RVS index.
const char mem_config[MAX_CONFIG_LENGTH] =
"{actions: [{name: action_1, device: all, module: mem, parallel: true, "
"count: 1, wait: 100, mapped_memory: false, mem_blocks: 128, "
Expand Down Expand Up @@ -70,11 +74,12 @@ rvs_status_t amd::rdc::run_rvs_app(const char* config, const size_t config_size)

/*******************************/

state = RVS_SESSION_STATE_IDLE;
_state = RVS_SESSION_STATE_IDLE;

/* Using custom gst configuration in string format */

status = rvs_session_create(&session_id, amd::rdc::session_callback);
_cookie = cookie;
status = rvs_session_create(&session_id, &RdcRVSBase::static_callback);

session_property.type = RVS_SESSION_TYPE_CUSTOM_ACTION;
session_property.custom_action.config = active_config;
Expand All @@ -89,30 +94,15 @@ rvs_status_t amd::rdc::run_rvs_app(const char* config, const size_t config_size)
return status;
}

while (state != RVS_SESSION_STATE_COMPLETED) {
while (_state != RVS_SESSION_STATE_COMPLETED) {
};

_cookie = nullptr;

status = rvs_session_destroy(session_id);
if (status != RVS_STATUS_SUCCESS) {
RDC_LOG(RDC_ERROR, "RVS session destroy failed with status: " << status);
}

return status;
}

void amd::rdc::session_callback(rvs_session_id_t session_id, const rvs_results_t* results) {
// NOTE: This is a placeholder!
// TODO: Use GRPC to send message back to client periodically
printf(
"/*******************************************************************/"
"\n");
printf("session id -> %d state -> %d\n", session_id, results->state);
printf("session id -> %d status -> %d\n", session_id, results->status);
printf("session id -> %d output -> %s\n", session_id, results->output_log);
printf(
"/*******************************************************************/"
"\n");

state = results->state;
printf("state -> %d\n", state);
}

0 comments on commit 37ddd5b

Please sign in to comment.