summaryrefslogtreecommitdiffstats
path: root/collectors/python.d.plugin/nvidia_smi
diff options
context:
space:
mode:
authorIlya Mashchenko <ilya@netdata.cloud>2019-11-28 11:54:18 +0300
committerGitHub <noreply@github.com>2019-11-28 11:54:18 +0300
commitd8ee63fcc9d9b46a59d6ee7f5dfb56e06122fbd0 (patch)
treea2c241463648cb32557e9b988ee8136b53908dcc /collectors/python.d.plugin/nvidia_smi
parentbfd54ca6e511f3cbb3a406125f66e36657ec58d6 (diff)
nvidia-smi: not loop mode (#7372)
* add non loop mode
Diffstat (limited to 'collectors/python.d.plugin/nvidia_smi')
-rw-r--r--collectors/python.d.plugin/nvidia_smi/README.md5
-rw-r--r--collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py23
-rw-r--r--collectors/python.d.plugin/nvidia_smi/nvidia_smi.conf3
3 files changed, 24 insertions, 7 deletions
diff --git a/collectors/python.d.plugin/nvidia_smi/README.md b/collectors/python.d.plugin/nvidia_smi/README.md
index 71e3e28893..9b3f9cedee 100644
--- a/collectors/python.d.plugin/nvidia_smi/README.md
+++ b/collectors/python.d.plugin/nvidia_smi/README.md
@@ -16,6 +16,8 @@ This module monitors the `nvidia-smi` cli tool.
- Make sure `netdata` user can execute `/usr/bin/nvidia-smi` or wherever your binary is.
+- If `nvidia-smi` process [is not killed after netdata restart](https://github.com/netdata/netdata/issues/7143) you need to off `loop_mode`.
+
- `poll_seconds` is how often in seconds the tool is polled for as an integer.
It produces:
@@ -36,7 +38,8 @@ It produces:
Sample:
```yaml
-poll_seconds: 1
+loop_mode : yes
+poll_seconds : 1
```
[![analytics](https://www.google-analytics.com/collect?v=1&aip=1&t=pageview&_s=1&ds=github&dr=https%3A%2F%2Fgithub.com%2Fnetdata%2Fnetdata&dl=https%3A%2F%2Fmy-netdata.io%2Fgithub%2Fcollectors%2Fpython.d.plugin%2Fnvidia_smi%2FREADME&_u=MAC~&cid=5792dfd7-8dc4-476b-af31-da2fdb9f93d2&tid=UA-64295674-3)](<>)
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 0bea268ef0..01a8f1c7bd 100644
--- a/collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py
+++ b/collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py
@@ -7,12 +7,11 @@ import subprocess
import threading
import xml.etree.ElementTree as et
-from bases.collection import find_binary
from bases.FrameworkServices.SimpleService import SimpleService
+from bases.collection import find_binary
disabled_by_default = True
-
NVIDIA_SMI = 'nvidia-smi'
BAD_VALUE = 'N/A'
@@ -76,7 +75,8 @@ def gpu_charts(gpu):
]
},
ENCODER_UTIL: {
- 'options': [None, 'Encoder/Decoder Utilization', 'percentage', fam, 'nvidia_smi.encoder_utilization', 'line'],
+ 'options': [None, 'Encoder/Decoder Utilization', 'percentage', fam, 'nvidia_smi.encoder_utilization',
+ 'line'],
'lines': [
['encoder_util', 'encoder'],
['decoder_util', 'decoder'],
@@ -212,6 +212,7 @@ def handle_attr_error(method):
return method(*args, **kwargs)
except AttributeError:
return None
+
return on_call
@@ -221,6 +222,7 @@ def handle_value_error(method):
return method(*args, **kwargs)
except ValueError:
return None
+
return on_call
@@ -342,10 +344,11 @@ class Service(SimpleService):
super(Service, self).__init__(configuration=configuration, name=name)
self.order = list()
self.definitions = dict()
+ self.loop_mode = configuration.get('loop_mode', True)
poll = int(configuration.get('poll_seconds', 1))
self.poller = NvidiaSMIPoller(poll)
- def get_data(self):
+ def get_data_loop_mode(self):
if not self.poller.is_started():
self.poller.start()
@@ -353,7 +356,17 @@ class Service(SimpleService):
self.debug('poller is off')
return None
- last_data = self.poller.data()
+ return self.poller.data()
+
+ def get_data_normal_mode(self):
+ return self.poller.run_once()
+
+ def get_data(self):
+ if self.loop_mode:
+ last_data = self.get_data_loop_mode()
+ else:
+ last_data = self.get_data_normal_mode()
+
if not last_data:
return None
diff --git a/collectors/python.d.plugin/nvidia_smi/nvidia_smi.conf b/collectors/python.d.plugin/nvidia_smi/nvidia_smi.conf
index 53e544a5d0..4c8bdce766 100644
--- a/collectors/python.d.plugin/nvidia_smi/nvidia_smi.conf
+++ b/collectors/python.d.plugin/nvidia_smi/nvidia_smi.conf
@@ -61,6 +61,7 @@
#
# Additionally to the above, example also supports the following:
#
-# poll_seconds: SECONDS # default is 1. Sets the frequency of seconds the nvidia-smi tool is polled.
+# loop_mode: yes/no # default is yes. If set to yes `nvidia-smi` is executed in a separate thread using `-l` option.
+# poll_seconds: SECONDS # default is 1. Sets the frequency of seconds the nvidia-smi tool is polled in loop mode.
#
# ----------------------------------------------------------------------