summaryrefslogtreecommitdiffstats
path: root/collectors
diff options
context:
space:
mode:
authorIlya Mashchenko <ilya@netdata.cloud>2022-08-28 00:00:57 +0300
committerGitHub <noreply@github.com>2022-08-28 00:00:57 +0300
commit5e31008d2d87958ee50d114247b80fe2e6f75cfd (patch)
tree70ff07ec85896888015f1d46ced385bc5110ad3b /collectors
parent0bbad58c032b3e727e67ef7ceac7e2d4e1a75cee (diff)
feat(python.d/nvidia_smi): collect power state (#13580)
Diffstat (limited to 'collectors')
-rw-r--r--collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py25
1 files changed, 22 insertions, 3 deletions
diff --git a/collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py b/collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py
index 76e28f2c18..23e90e6584 100644
--- a/collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py
+++ b/collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py
@@ -4,11 +4,10 @@
# Author: Ilya Mashchenko (ilyam8)
# User Memory Stat Author: Guido Scatena (scatenag)
-import subprocess
-import threading
import os
import pwd
-
+import subprocess
+import threading
import xml.etree.ElementTree as et
from bases.FrameworkServices.SimpleService import SimpleService
@@ -32,6 +31,7 @@ BAR_USAGE = 'bar1_mem_usage'
TEMPERATURE = 'temperature'
CLOCKS = 'clocks'
POWER = 'power'
+POWER_STATE = 'power_state'
PROCESSES_MEM = 'processes_mem'
USER_MEM = 'user_mem'
USER_NUM = 'user_num'
@@ -47,11 +47,15 @@ ORDER = [
TEMPERATURE,
CLOCKS,
POWER,
+ POWER_STATE,
PROCESSES_MEM,
USER_MEM,
USER_NUM,
]
+# https://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__gpupstate.html
+POWER_STATES = ['P' + str(i) for i in range(0, 16)]
+
def gpu_charts(gpu):
fam = gpu.full_name()
@@ -125,6 +129,10 @@ def gpu_charts(gpu):
['power_draw', 'power', 'absolute', 1, 100],
]
},
+ POWER_STATE: {
+ 'options': [None, 'Power State', 'state', fam, 'nvidia_smi.power_state', 'line'],
+ 'lines': [['power_state_' + v.lower(), v, 'absolute'] for v in POWER_STATES]
+ },
PROCESSES_MEM: {
'options': [None, 'Memory Used by Each Process', 'MiB', fam, 'nvidia_smi.processes_mem', 'stacked'],
'lines': []
@@ -382,6 +390,10 @@ class GPU:
def mem_clock(self):
return self.root.find('clocks').find('mem_clock').text.split()[0]
+ @handle_attr_error
+ def power_state(self):
+ return str(self.root.find('power_readings').find('power_state').text.split()[0])
+
@handle_value_error
@handle_attr_error
def power_draw(self):
@@ -426,6 +438,13 @@ class GPU:
'mem_clock': self.mem_clock(),
'power_draw': self.power_draw(),
}
+
+ for v in POWER_STATES:
+ data['power_state_' + v.lower()] = 0
+ p_state = self.power_state()
+ if p_state:
+ data['power_state_' + p_state.lower()] = 1
+
processes = self.processes() or []
users = set()
for p in processes: