Add rsmi_dev_pci_throughput_get()
This commit is contained in:
+39
-2
@@ -290,6 +290,14 @@ static rsmi_status_t get_dev_value_str(amd::smi::DevInfoTypes type,
|
||||
return errno_to_rsmi_status(ret);
|
||||
}
|
||||
|
||||
static rsmi_status_t get_dev_value_line(amd::smi::DevInfoTypes type,
|
||||
uint32_t dv_ind, std::string *val_str) {
|
||||
GET_DEV_FROM_INDX
|
||||
int ret = dev->readDevInfoLine(type, val_str);
|
||||
|
||||
return errno_to_rsmi_status(ret);
|
||||
}
|
||||
|
||||
static rsmi_status_t set_dev_value(amd::smi::DevInfoTypes type,
|
||||
uint32_t dv_ind, uint64_t val) {
|
||||
GET_DEV_FROM_INDX
|
||||
@@ -911,7 +919,7 @@ rsmi_dev_pci_bandwidth_get(uint32_t dv_ind, rsmi_pcie_bandwidth *b) {
|
||||
return RSMI_STATUS_INVALID_ARGS;
|
||||
}
|
||||
|
||||
return get_frequencies(amd::smi::kDevPCIEBW, dv_ind,
|
||||
return get_frequencies(amd::smi::kDevPCIEClk, dv_ind,
|
||||
&b->transfer_rate, b->lanes);
|
||||
|
||||
CATCH
|
||||
@@ -949,13 +957,42 @@ rsmi_dev_pci_bandwidth_set(uint32_t dv_ind, uint64_t bw_bitmask) {
|
||||
}
|
||||
|
||||
uint32_t ret_i;
|
||||
ret_i = dev->writeDevInfo(amd::smi::kDevPCIEBW, freq_enable_str);
|
||||
ret_i = dev->writeDevInfo(amd::smi::kDevPCIEClk, freq_enable_str);
|
||||
|
||||
return errno_to_rsmi_status(ret_i);
|
||||
|
||||
CATCH
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_pci_throughput_get(uint32_t dv_ind, uint64_t *sent,
|
||||
uint64_t *received, uint64_t *max_pkt_sz) {
|
||||
TRY
|
||||
rsmi_status_t ret;
|
||||
|
||||
std::string val_str;
|
||||
ret = get_dev_value_line(amd::smi::kDevPCIEThruPut, dv_ind, &val_str);
|
||||
|
||||
if (ret != RSMI_STATUS_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::istringstream fs_rng(val_str);
|
||||
|
||||
if (sent) {
|
||||
fs_rng >> *sent;
|
||||
}
|
||||
if (received) {
|
||||
fs_rng >> *received;
|
||||
}
|
||||
if (max_pkt_sz) {
|
||||
fs_rng >> *max_pkt_sz;
|
||||
}
|
||||
|
||||
return RSMI_STATUS_SUCCESS;
|
||||
CATCH
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_temp_metric_get(uint32_t dv_ind, uint32_t sensor_ind,
|
||||
rsmi_temperature_metric metric, int64_t *temperature) {
|
||||
|
||||
+23
-6
@@ -69,7 +69,7 @@ static const char *kDevPowerProfileModeFName = "pp_power_profile_mode";
|
||||
static const char *kDevPowerODVoltageFName = "pp_od_clk_voltage";
|
||||
static const char *kDevUsageFName = "gpu_busy_percent";
|
||||
static const char *kDevVBiosVerFName = "vbios_version";
|
||||
|
||||
static const char *kDevPCIEThruPutFName = "pcie_bw";
|
||||
static const char *kDevPerfLevelAutoStr = "auto";
|
||||
static const char *kDevPerfLevelLowStr = "low";
|
||||
static const char *kDevPerfLevelHighStr = "high";
|
||||
@@ -86,11 +86,12 @@ static const std::map<DevInfoTypes, const char *> kDevAttribNameMap = {
|
||||
{kDevDevID, kDevDevIDFName},
|
||||
{kDevGPUMClk, kDevGPUMClkFName},
|
||||
{kDevGPUSClk, kDevGPUSClkFName},
|
||||
{kDevPCIEBW, kDevGPUPCIEClkFname},
|
||||
{kDevPCIEClk, kDevGPUPCIEClkFname},
|
||||
{kDevPowerProfileMode, kDevPowerProfileModeFName},
|
||||
{kDevUsage, kDevUsageFName},
|
||||
{kDevPowerODVoltage, kDevPowerODVoltageFName},
|
||||
{kDevVBiosVer, kDevVBiosVerFName},
|
||||
{kDevPCIEThruPut, kDevPCIEThruPutFName},
|
||||
};
|
||||
|
||||
static const std::map<rsmi_dev_perf_level, const char *> kDevPerfLvlMap = {
|
||||
@@ -216,7 +217,7 @@ int Device::writeDevInfo(DevInfoTypes type, uint64_t val) {
|
||||
|
||||
case kDevGPUMClk: // integer (index within num-freq range)
|
||||
case kDevGPUSClk: // integer (index within num-freq range)
|
||||
case kDevPCIEBW: // integer (index within num-freq range)
|
||||
case kDevPCIEClk: // integer (index within num-freq range)
|
||||
case kDevDevID: // string (read-only)
|
||||
default:
|
||||
break;
|
||||
@@ -229,7 +230,7 @@ int Device::writeDevInfo(DevInfoTypes type, std::string val) {
|
||||
switch (type) {
|
||||
case kDevGPUMClk:
|
||||
case kDevGPUSClk:
|
||||
case kDevPCIEBW:
|
||||
case kDevPCIEClk:
|
||||
case kDevPowerODVoltage:
|
||||
return writeDevInfoStr(type, val);
|
||||
|
||||
@@ -243,9 +244,24 @@ int Device::writeDevInfo(DevInfoTypes type, std::string val) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int Device::readDevInfoLine(DevInfoTypes type, std::string *line) {
|
||||
int ret;
|
||||
std::ifstream fs;
|
||||
|
||||
assert(line != nullptr);
|
||||
|
||||
ret = openSysfsFileStream(type, &fs);
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::getline(fs, *line);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Device::readDevInfoMultiLineStr(DevInfoTypes type,
|
||||
std::vector<std::string> *retVec) {
|
||||
auto tempPath = path_;
|
||||
std::string line;
|
||||
int ret;
|
||||
std::ifstream fs;
|
||||
@@ -303,7 +319,7 @@ int Device::readDevInfo(DevInfoTypes type, std::vector<std::string> *val) {
|
||||
switch (type) {
|
||||
case kDevGPUMClk:
|
||||
case kDevGPUSClk:
|
||||
case kDevPCIEBW:
|
||||
case kDevPCIEClk:
|
||||
case kDevPowerProfileMode:
|
||||
case kDevPowerODVoltage:
|
||||
return readDevInfoMultiLineStr(type, val);
|
||||
@@ -325,6 +341,7 @@ int Device::readDevInfo(DevInfoTypes type, std::string *val) {
|
||||
case kDevOverDriveLevel:
|
||||
case kDevDevID:
|
||||
case kDevVBiosVer:
|
||||
case kDevPCIEThruPut:
|
||||
return readDevInfoStr(type, val);
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user