2
0
mirror of https://opendev.org/x/pyghmi synced 2025-02-04 21:12:47 +00:00

Add FAPM meters for better quality power data

Change-Id: I5e716badabdf5bdaa04666ddcd55f1d3c6d2a789
This commit is contained in:
Jarrod Johnson 2024-06-11 10:58:20 -04:00
parent 9b05952343
commit ea0bfc99c9

View File

@ -32,8 +32,8 @@ class EnergyManager(object):
try:
rsp = ipmicmd.xraw_command(netfn=0x3a, command=0x32, data=[4, 2, 0, 0, 0])
if len(rsp['data']) >= 8:
self.supportedmeters = ('DC Energy',) # 'GPU Power',
# 'Node Power', 'Total Power')
self.supportedmeters = ('DC Energy', 'GPU Power',
'Node Power', 'Total Power')
self._mypowermeters = ('node power', 'total power', 'gpu power', 'riser 1 power', 'riser 2 power')
self._usefapm = True
return
@ -67,9 +67,22 @@ class EnergyManager(object):
def get_sensor(self, name, ipmicmd):
if name.lower() not in self._mypowermeters:
raise pygexc.UnsupportedFunctionality('Unrecogcized sensor')
rsp = ipmicmd.xraw_command(netfn=0x3a, command=0x32, data=[4, 8, 0, 0, 0])
npow, gpupow, r1pow, r2pow = struct.unpack('<HHHH', rsp['data'][6:10])
raise pygexc.UnsupportedFunctionality('Unrecognized sensor: {}'.format(name))
tries = 3
rsp = None
while tries:
tries -= 1
try:
rsp = ipmicmd.xraw_command(netfn=0x3a, command=0x32, data=[4, 8, 0, 0, 0])
break
except pygexc.IpmiException as ie:
if tries and ie.ipmicode == 0xc3:
ipmicmd.ipmi_session.pause(0.1)
continue
raise
if rsp is None:
raise pygexc.UnsupportedFunctionality('Unrecognized sensor: {}'.format(name))
npow, gpupow, r1pow, r2pow = struct.unpack('<HHHH', rsp['data'][6:14])
if name.lower().startswith('node'):
return npow, 'W'
elif name.lower().startswith('gpu'):