SWDEV-439576 - rocmsmi -> amdsmi
- Migrate to amdsmi library - NOTE: raslib still uses rocmsmi - Remove unused rocmsmi service - Remove unused RDC client code - Remove RSMI calls from protos/rdc.proto Change-Id: Ifc34a264c506b0ec5792307ee56b34526268762d Signed-off-by: Galantsev, Dmitrii <dmitrii.galantsev@amd.com>
This commit is contained in:
@@ -31,8 +31,8 @@ message("----------Proj Src Dir: " ${PROJECT_SOURCE_DIR})
|
||||
message("----------Proj Bld Dir: " ${PROJECT_BINARY_DIR})
|
||||
message("----------Proj Lib Dir: " ${PROJECT_BINARY_DIR}/lib)
|
||||
message("----------Proj Exe Dir: " ${PROJECT_BINARY_DIR}/bin)
|
||||
message("----------RSMI Lib Dir: " ${RSMI_LIB_DIR})
|
||||
message("----------RSMI Inc Dir: " ${RSMI_INC_DIR})
|
||||
message("----------SMI Lib Dir: " ${SMI_LIB_DIR})
|
||||
message("----------SMI Inc Dir: " ${SMI_INC_DIR})
|
||||
message("---------GRPC Root Dir: " ${GRPC_ROOT})
|
||||
message("")
|
||||
|
||||
@@ -59,7 +59,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
"${PROJECT_SOURCE_DIR}/include"
|
||||
"${GRPC_ROOT}/include"
|
||||
"${PROTOB_OUT_DIR}"
|
||||
"${RSMI_INC_DIR}"
|
||||
"${SMI_INC_DIR}"
|
||||
"${PROJECT_SOURCE_DIR}")
|
||||
|
||||
set(SERVER_SRC_LIST
|
||||
@@ -68,7 +68,6 @@ set(SERVER_SRC_LIST
|
||||
"${PROTOBUF_GENERATED_SRCS}"
|
||||
"${SRC_DIR}/rdc_admin_service.cc"
|
||||
"${SRC_DIR}/rdc_api_service.cc"
|
||||
"${SRC_DIR}/rdc_rsmi_service.cc"
|
||||
"${SRC_DIR}/rdc_server_main.cc")
|
||||
message("SERVER_SRC_LIST=${SERVER_SRC_LIST}")
|
||||
|
||||
@@ -76,7 +75,7 @@ set(SERVER_DAEMON_EXE "rdcd")
|
||||
configure_file("rdc.service.in" "${PROJECT_BINARY_DIR}/rdc.service" @ONLY)
|
||||
set(SERVICE_FILE_NAME "rdc.service")
|
||||
|
||||
link_directories(${RSMI_LIB_DIR})
|
||||
link_directories(${SMI_LIB_DIR})
|
||||
|
||||
add_executable(${SERVER_DAEMON_EXE} "${SERVER_SRC_LIST}")
|
||||
|
||||
@@ -85,7 +84,7 @@ set_target_properties(${SERVER_DAEMON_EXE}
|
||||
PROPERTIES INSTALL_RPATH "\$ORIGIN/../lib")
|
||||
|
||||
target_link_libraries(${SERVER_DAEMON_EXE} pthread rt gRPC::grpc++
|
||||
cap dl rocm_smi64 rdc_bootstrap)
|
||||
cap dl amd_smi rdc_bootstrap)
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SERVER_DAEMON_EXE}
|
||||
PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE GROUP_READ
|
||||
|
||||
@@ -22,9 +22,9 @@ THE SOFTWARE.
|
||||
#ifndef SERVER_INCLUDE_RDC_RDC_ADMIN_SERVICE_H_
|
||||
#define SERVER_INCLUDE_RDC_RDC_ADMIN_SERVICE_H_
|
||||
|
||||
#include "amd_smi/amdsmi.h"
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rdc/rdc_admin_service.h"
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
|
||||
namespace amd {
|
||||
namespace rdc {
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2019 - present Advanced Micro Devices, Inc. All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
#ifndef SERVER_INCLUDE_RDC_RDC_RSMI_SERVICE_H_
|
||||
#define SERVER_INCLUDE_RDC_RDC_RSMI_SERVICE_H_
|
||||
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
|
||||
namespace amd {
|
||||
namespace rdc {
|
||||
|
||||
class RsmiServiceImpl final : public ::rdc::Rsmi::Service {
|
||||
public:
|
||||
RsmiServiceImpl();
|
||||
~RsmiServiceImpl();
|
||||
|
||||
rsmi_status_t Initialize(uint64_t rsmi_init_flags = 0);
|
||||
|
||||
::grpc::Status GetNumDevices(::grpc::ServerContext* context,
|
||||
const ::rdc::GetNumDevicesRequest* request,
|
||||
::rdc::GetNumDevicesResponse* reply) override;
|
||||
|
||||
::grpc::Status GetTemperature(::grpc::ServerContext* context,
|
||||
const ::rdc::GetTemperatureRequest* request,
|
||||
::rdc::GetTemperatureResponse* response) override;
|
||||
|
||||
::grpc::Status GetFanRpms(::grpc::ServerContext* context, const ::rdc::GetFanRpmsRequest* request,
|
||||
::rdc::GetFanRpmsResponse* response) override;
|
||||
|
||||
::grpc::Status GetFanSpeed(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedRequest* request,
|
||||
::rdc::GetFanSpeedResponse* response) override;
|
||||
|
||||
::grpc::Status GetFanSpeedMax(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedMaxRequest* request,
|
||||
::rdc::GetFanSpeedMaxResponse* response) override;
|
||||
|
||||
private:
|
||||
bool rsmi_initialized_;
|
||||
};
|
||||
|
||||
} // namespace rdc
|
||||
} // namespace amd
|
||||
|
||||
#endif // SERVER_INCLUDE_RDC_RDC_RSMI_SERVICE_H_
|
||||
@@ -29,7 +29,6 @@ THE SOFTWARE.
|
||||
|
||||
#include "rdc/rdc_admin_service.h"
|
||||
#include "rdc/rdc_api_service.h"
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
|
||||
typedef struct {
|
||||
std::string listen_address;
|
||||
@@ -49,9 +48,6 @@ class RDCServer {
|
||||
void Run(void);
|
||||
void ShutDown(void);
|
||||
|
||||
bool start_rsmi_service(void) const { return start_rsmi_service_; }
|
||||
void set_start_rsmi_service(bool s) { start_rsmi_service_ = s; }
|
||||
|
||||
bool start_rdc_admin_service(void) const { return start_rdc_admin_service_; }
|
||||
void set_start_rdc_admin_service(bool s) { start_rdc_admin_service_ = s; }
|
||||
|
||||
@@ -68,8 +64,6 @@ class RDCServer {
|
||||
bool secure_creds_;
|
||||
bool use_pinned_certs_;
|
||||
bool log_debug_;
|
||||
bool start_rsmi_service_;
|
||||
amd::rdc::RsmiServiceImpl* rsmi_service_;
|
||||
RdcdCmdLineOpts* cmd_line_;
|
||||
|
||||
bool start_rdc_admin_service_;
|
||||
|
||||
@@ -1,175 +0,0 @@
|
||||
|
||||
/*
|
||||
Copyright (c) 2019 - present Advanced Micro Devices, Inc. All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <grpcpp/grpcpp.h>
|
||||
|
||||
#include <csignal>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
|
||||
namespace amd {
|
||||
namespace rdc {
|
||||
|
||||
RsmiServiceImpl::RsmiServiceImpl() : rsmi_initialized_(false) {}
|
||||
|
||||
RsmiServiceImpl::~RsmiServiceImpl() {
|
||||
if (rsmi_initialized_) {
|
||||
rsmi_status_t rsmi_ret = rsmi_shut_down();
|
||||
rsmi_initialized_ = false;
|
||||
assert(rsmi_ret == RSMI_STATUS_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
// rsmi and rdc currently happen to have a 1-to-1 mapping, but
|
||||
// have this function in case that changes
|
||||
static rsmi_temperature_metric_t rdc_temp2rsmi_temp(
|
||||
::rdc::GetTemperatureRequest_TemperatureMetric rdc_temp) {
|
||||
return static_cast<rsmi_temperature_metric_t>(rdc_temp);
|
||||
}
|
||||
|
||||
rsmi_status_t RsmiServiceImpl::Initialize(uint64_t rsmi_init_flags) {
|
||||
rsmi_status_t rsmi_ret = rsmi_init(rsmi_init_flags);
|
||||
if (rsmi_ret != RSMI_STATUS_SUCCESS) {
|
||||
std::cout << "rsmi_init() returned error" << std::endl;
|
||||
} else {
|
||||
rsmi_initialized_ = true;
|
||||
}
|
||||
return rsmi_ret;
|
||||
}
|
||||
|
||||
::grpc::Status RsmiServiceImpl::GetNumDevices(::grpc::ServerContext* context,
|
||||
const ::rdc::GetNumDevicesRequest* request,
|
||||
::rdc::GetNumDevicesResponse* reply) {
|
||||
assert(reply != nullptr);
|
||||
uint32_t num_devices;
|
||||
|
||||
(void)context; // Quiet warning for now;
|
||||
(void)request;
|
||||
assert(reply != nullptr);
|
||||
|
||||
rsmi_status_t ret = rsmi_num_monitor_devices(&num_devices);
|
||||
|
||||
// TODO(cfreehil) replace below with macro
|
||||
if (ret != RSMI_STATUS_SUCCESS) {
|
||||
std::cout << "rsmi_num_monitor_devices() returned error" << std::endl;
|
||||
}
|
||||
reply->set_val(num_devices);
|
||||
reply->set_ret_val(ret);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RsmiServiceImpl::GetTemperature(::grpc::ServerContext* context,
|
||||
const ::rdc::GetTemperatureRequest* request,
|
||||
::rdc::GetTemperatureResponse* response) {
|
||||
(void)context; // Quiet warning for now;
|
||||
assert(response != nullptr);
|
||||
|
||||
int64_t temperature;
|
||||
rsmi_status_t ret = rsmi_dev_temp_metric_get(request->dv_ind(), request->sensor_type(),
|
||||
rdc_temp2rsmi_temp(request->metric()), &temperature);
|
||||
|
||||
response->set_temperature(temperature);
|
||||
response->set_ret_val(ret);
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RsmiServiceImpl::GetFanRpms(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanRpmsRequest* request,
|
||||
::rdc::GetFanRpmsResponse* response) {
|
||||
(void)context; // Quiet warning for now;
|
||||
assert(response != nullptr);
|
||||
|
||||
int64_t rpms;
|
||||
rsmi_status_t ret = rsmi_dev_fan_rpms_get(request->dv_ind(), request->sensor_ind(), &rpms);
|
||||
|
||||
response->set_rpms(rpms);
|
||||
response->set_ret_val(ret);
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RsmiServiceImpl::GetFanSpeed(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedRequest* request,
|
||||
::rdc::GetFanSpeedResponse* response) {
|
||||
(void)context; // Quiet warning for now;
|
||||
assert(response != nullptr);
|
||||
|
||||
int64_t speed;
|
||||
rsmi_status_t ret = rsmi_dev_fan_speed_get(request->dv_ind(), request->sensor_ind(), &speed);
|
||||
|
||||
response->set_speed(speed);
|
||||
response->set_ret_val(ret);
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RsmiServiceImpl::GetFanSpeedMax(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFanSpeedMaxRequest* request,
|
||||
::rdc::GetFanSpeedMaxResponse* response) {
|
||||
(void)context; // Quiet warning for now;
|
||||
assert(response != nullptr);
|
||||
|
||||
uint64_t max_speed;
|
||||
rsmi_status_t ret =
|
||||
rsmi_dev_fan_speed_max_get(request->dv_ind(), request->sensor_ind(), &max_speed);
|
||||
|
||||
response->set_max_speed(max_speed);
|
||||
response->set_ret_val(ret);
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
// TODO(cfreehil): read server config from YAML file. Config can include things
|
||||
// like server address, Secure/Insecure creds, rsmi_init flags, etc.
|
||||
void RunServer() {
|
||||
std::string server_address("0.0.0.0:50051");
|
||||
RsmiServiceImpl service;
|
||||
|
||||
::grpc::ServerBuilder builder;
|
||||
// Listen on the given address without any authentication mechanism.
|
||||
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
|
||||
// Register "service" as the instance through which we'll communicate with
|
||||
// clients. In this case it corresponds to an *synchronous* service.
|
||||
builder.RegisterService(&service);
|
||||
// Finally assemble the server.
|
||||
std::unique_ptr<::grpc::Server> server(builder.BuildAndStart());
|
||||
std::cout << "Server listening on " << server_address << std::endl;
|
||||
|
||||
uint64_t flags = 0; // TODO(cfreehil) Read this from config file
|
||||
rsmi_status_t rsmi_ret = rsmi_init(flags);
|
||||
// TODO(cfreehil): check rsmi return code
|
||||
// Wait for the server to shutdown. Note that some other thread must be
|
||||
// responsible for shutting down the server for this call to ever return.
|
||||
if (rsmi_ret != RSMI_STATUS_SUCCESS) {
|
||||
std::cout << "rsmi_init() returned error. Exiting" << std::endl;
|
||||
return;
|
||||
}
|
||||
server->Wait();
|
||||
}
|
||||
|
||||
} // namespace rdc
|
||||
} // namespace amd
|
||||
@@ -38,12 +38,11 @@ THE SOFTWARE.
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "amd_smi/amdsmi.h"
|
||||
#include "common/rdc_capabilities.h"
|
||||
#include "common/rdc_utils.h"
|
||||
#include "rdc.grpc.pb.h" // NOLINT
|
||||
#include "rdc/rdc_api_service.h"
|
||||
#include "rdc/rdc_rsmi_service.h"
|
||||
#include "rocm_smi/rocm_smi.h"
|
||||
|
||||
// TODO(cfreehil):
|
||||
// The following need to be made configurable (e.g., from YAML):
|
||||
@@ -76,8 +75,7 @@ static const char* kDefaultListenAddress = "0.0.0.0";
|
||||
static const char* kDefaultListenPort = "50051";
|
||||
static const uint32_t kRSMIUMask = 027;
|
||||
|
||||
RDCServer::RDCServer()
|
||||
: secure_creds_(false), rsmi_service_(nullptr), rdc_admin_service_(nullptr) {}
|
||||
RDCServer::RDCServer() : secure_creds_(false), rdc_admin_service_(nullptr) {}
|
||||
|
||||
RDCServer::~RDCServer() {}
|
||||
|
||||
@@ -195,18 +193,6 @@ void RDCServer::Run() {
|
||||
builder.RegisterService(rdc_admin_service_);
|
||||
}
|
||||
|
||||
if (start_rsmi_service()) {
|
||||
rsmi_service_ = new amd::rdc::RsmiServiceImpl();
|
||||
builder.RegisterService(rsmi_service_);
|
||||
|
||||
rsmi_status_t ret = rsmi_service_->Initialize(0);
|
||||
|
||||
if (ret != RSMI_STATUS_SUCCESS) {
|
||||
std::cerr << "Failed to start RSMI service. ret = " << ret << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (start_api_service()) {
|
||||
api_service_ = new amd::rdc::RdcAPIServiceImpl();
|
||||
builder.RegisterService(api_service_);
|
||||
@@ -287,11 +273,6 @@ static int FileOwner(const char* fn, std::string* owner) {
|
||||
void RDCServer::ShutDown(void) {
|
||||
server_->Shutdown();
|
||||
|
||||
if (rsmi_service_) {
|
||||
delete rsmi_service_;
|
||||
rsmi_service_ = nullptr;
|
||||
}
|
||||
|
||||
if (rdc_admin_service_) {
|
||||
delete rdc_admin_service_;
|
||||
rdc_admin_service_ = nullptr;
|
||||
@@ -673,7 +654,6 @@ int main(int argc, char** argv) {
|
||||
}
|
||||
|
||||
// TODO(cfreehil): Eventually, set these by reading a config file
|
||||
rdc_server.set_start_rsmi_service(true);
|
||||
rdc_server.set_start_rdc_admin_service(true);
|
||||
rdc_server.set_start_api_service(true);
|
||||
|
||||
|
||||
مرجع در شماره جدید
Block a user