[SWDEV-437365] Fix --showpower
Updates: - [CLI] Switching to use generic rsmi_dev_power_get() this is a backwards compatible function to retrieve power values. More consistent than previous fixes. - [API] Update API for rsmi_dev_power_get() Now provides @depricated for this function. Providing notes on newer ASICS only support current socket power, where as previous ASICS only provided average power. Change-Id: I34da0e925cf0b6c669bdd801b017f33f3b3ee86a Signed-off-by: Charis Poag <Charis.Poag@amd.com>
Bu işleme şunda yer alıyor:
@@ -387,32 +387,40 @@ def getPidList():
|
||||
return
|
||||
|
||||
|
||||
def getAvgPower(device, silent=False):
|
||||
""" Return the average power level of a given device
|
||||
def getPower(device):
|
||||
""" Return dictionary of power responses.
|
||||
|
||||
@param device: DRM device identifier
|
||||
@param silent=Turn on to silence error output
|
||||
(you plan to handle manually). Default is off.
|
||||
"""
|
||||
power = c_uint32()
|
||||
ret = rocmsmi.rsmi_dev_power_ave_get(device, 0, byref(power))
|
||||
if rsmi_ret_ok(ret, device, 'get_power_avg', silent):
|
||||
return str(power.value / 1000000)
|
||||
return 'N/A'
|
||||
|
||||
def getCurrentSocketPower(device, silent=False):
|
||||
""" Return the current (also known as instant)
|
||||
socket power of a given device
|
||||
Response power dictionary:
|
||||
{
|
||||
'power': string wattage response or 'N/A' (for not RSMI_STATUS_SUCCESS),
|
||||
'power_type': power type string - 'Current Socket' or 'Average',
|
||||
'unit': W (Watt)
|
||||
'ret': response of rsmi_dev_power_get(device, byref(power), byref(power_type))
|
||||
}
|
||||
|
||||
@param device: DRM device identifier
|
||||
@param silent=Turn on to silence error output
|
||||
(you plan to handle manually). Default is off.
|
||||
"""
|
||||
power = c_uint32()
|
||||
ret = rocmsmi.rsmi_dev_current_socket_power_get(device, byref(power))
|
||||
if rsmi_ret_ok(ret, device, 'get_socket_power', silent):
|
||||
return str(power.value / 1000000)
|
||||
return 'N/A'
|
||||
|
||||
power = c_int64(0)
|
||||
power_type = rsmi_power_type_t()
|
||||
power_ret_dict = {
|
||||
'power': "N/A",
|
||||
'power_type': "N/A",
|
||||
'unit': 'W',
|
||||
'ret': rsmi_status_t.RSMI_STATUS_NOT_SUPPORTED
|
||||
}
|
||||
ret = rocmsmi.rsmi_dev_power_get(device, byref(power), byref(power_type))
|
||||
if ret == rsmi_status_t.RSMI_STATUS_SUCCESS:
|
||||
power_ret_dict = {
|
||||
'power': str(power.value / 1000000),
|
||||
'power_type': rsmi_power_type_dict[power_type.value],
|
||||
'unit': 'W',
|
||||
'ret': ret
|
||||
}
|
||||
else:
|
||||
power_ret_dict['ret'] = ret
|
||||
return power_ret_dict
|
||||
|
||||
|
||||
def getRasEnablement(device, block, silent=True):
|
||||
@@ -492,8 +500,9 @@ def getPowerLabel(deviceList):
|
||||
if len(deviceList) < 1:
|
||||
return powerLabel
|
||||
device=deviceList[0]
|
||||
power = getCurrentSocketPower(device, True)
|
||||
if power != '0.0' and power != 'N/A':
|
||||
power_dict = getPower(device)
|
||||
if (power_dict['ret'] == rsmi_status_t.RSMI_STATUS_SUCCESS and
|
||||
power_dict['power_type'] == 'CURRENT SOCKET'):
|
||||
powerLabel = rsmi_power_label.CURRENT_SOCKET_POWER
|
||||
return powerLabel
|
||||
|
||||
@@ -1756,17 +1765,12 @@ def showAllConcise(deviceList):
|
||||
temp_val = str(getTemp(device, available_temp_type, silent))
|
||||
if temp_val != 'N/A':
|
||||
temp_val += degree_sign + 'C'
|
||||
socketPwr = getCurrentSocketPower(device, True)
|
||||
avgPwr = getAvgPower(device, True)
|
||||
power_dict = getPower(device)
|
||||
powerVal = 'N/A'
|
||||
if socketPwr != '0.0' and socketPwr != 'N/A':
|
||||
socketPwr += 'W'
|
||||
powerVal=socketPwr
|
||||
elif avgPwr != '0.0' and avgPwr != 'N/A':
|
||||
avgPwr += 'W'
|
||||
powerVal=avgPwr
|
||||
else:
|
||||
powerVal = 'N/A'
|
||||
if (power_dict['ret'] == rsmi_status_t.RSMI_STATUS_SUCCESS and
|
||||
power_dict['power_type'] != 'INVALID_POWER_TYPE'):
|
||||
if power_dict['power'] != 0:
|
||||
powerVal = power_dict['power'] + power_dict['unit']
|
||||
combined_partition = (getMemoryPartition(device, silent) + ", "
|
||||
+ getComputePartition(device, silent))
|
||||
sclk = showCurrentClocks([device], 'sclk', concise=silent)
|
||||
@@ -2469,13 +2473,17 @@ def showPower(deviceList):
|
||||
secondaryPresent=False
|
||||
printLogSpacer(' Power Consumption ')
|
||||
for device in deviceList:
|
||||
if str(getCurrentSocketPower(device, True)) != 'N/A':
|
||||
printLog(device, 'Current Socket Graphics Package Power (W)', getCurrentSocketPower(device))
|
||||
power_dict = getPower(device)
|
||||
power = 'N/A'
|
||||
if (power_dict['ret'] == rsmi_status_t.RSMI_STATUS_SUCCESS and
|
||||
power_dict['power_type'] != 'INVALID_POWER_TYPE'):
|
||||
power = power_dict['power']
|
||||
printLog(device, power_dict['power_type'].title() + ' Graphics Package Power ('
|
||||
+ power_dict['unit'] + ')',
|
||||
power)
|
||||
elif checkIfSecondaryDie(device):
|
||||
printLog(device, 'Average Graphics Package Power (W)', "N/A (Secondary die)")
|
||||
secondaryPresent=True
|
||||
elif str(getAvgPower(device)) != '0.0':
|
||||
printLog(device, 'Average Graphics Package Power (W)', getAvgPower(device))
|
||||
else:
|
||||
printErrLog(device, 'Unable to get Average or Current Socket Graphics Package Power Consumption')
|
||||
if secondaryPresent:
|
||||
|
||||
@@ -662,3 +662,13 @@ class rsmi_power_label(str, Enum):
|
||||
AVG_POWER = '(Avg)'
|
||||
CURRENT_SOCKET_POWER = '(Socket)'
|
||||
|
||||
class rsmi_power_type_t(c_int):
|
||||
RSMI_AVERAGE_POWER = 0,
|
||||
RSMI_CURRENT_POWER = 1,
|
||||
RSMI_INVALID_POWER = 0xFFFFFFFF
|
||||
|
||||
rsmi_power_type_dict = {
|
||||
0: 'AVERAGE',
|
||||
1: 'CURRENT SOCKET',
|
||||
0xFFFFFFFF: 'INVALID_POWER_TYPE'
|
||||
}
|
||||
Yeni konuda referans
Bir kullanıcı engelle