2018-04-18 04:40:55 +08:00
|
|
|
package nvidia_smi
|
|
|
|
|
|
|
|
|
|
import (
|
2021-09-29 05:16:32 +08:00
|
|
|
"os"
|
2019-11-13 08:13:30 +08:00
|
|
|
"path/filepath"
|
2018-04-18 04:40:55 +08:00
|
|
|
"testing"
|
2019-11-13 08:13:30 +08:00
|
|
|
"time"
|
2018-05-09 04:11:12 +08:00
|
|
|
|
2019-11-13 08:13:30 +08:00
|
|
|
"github.com/influxdata/telegraf"
|
2019-11-13 08:12:15 +08:00
|
|
|
"github.com/influxdata/telegraf/testutil"
|
2018-05-09 04:11:12 +08:00
|
|
|
"github.com/stretchr/testify/require"
|
2018-04-18 04:40:55 +08:00
|
|
|
)
|
|
|
|
|
|
2019-11-13 08:13:30 +08:00
|
|
|
func TestGatherValidXML(t *testing.T) {
|
|
|
|
|
tests := []struct {
|
|
|
|
|
name string
|
|
|
|
|
filename string
|
|
|
|
|
expected []telegraf.Metric
|
2019-11-13 08:12:15 +08:00
|
|
|
}{
|
2019-11-13 08:13:30 +08:00
|
|
|
{
|
|
|
|
|
name: "GeForce GTX 1070 Ti",
|
|
|
|
|
filename: "gtx-1070-ti.xml",
|
|
|
|
|
expected: []telegraf.Metric{
|
|
|
|
|
testutil.MustMetric(
|
|
|
|
|
"nvidia_smi",
|
|
|
|
|
map[string]string{
|
|
|
|
|
"name": "GeForce GTX 1070 Ti",
|
|
|
|
|
"compute_mode": "Default",
|
|
|
|
|
"index": "0",
|
|
|
|
|
"pstate": "P8",
|
|
|
|
|
"uuid": "GPU-f9ba66fc-a7f5-94c5-da19-019ef2f9c665",
|
|
|
|
|
},
|
|
|
|
|
map[string]interface{}{
|
|
|
|
|
"clocks_current_graphics": 135,
|
|
|
|
|
"clocks_current_memory": 405,
|
|
|
|
|
"clocks_current_sm": 135,
|
|
|
|
|
"clocks_current_video": 405,
|
|
|
|
|
"encoder_stats_average_fps": 0,
|
|
|
|
|
"encoder_stats_average_latency": 0,
|
|
|
|
|
"encoder_stats_session_count": 0,
|
|
|
|
|
"fan_speed": 100,
|
|
|
|
|
"memory_free": 4054,
|
|
|
|
|
"memory_total": 4096,
|
|
|
|
|
"memory_used": 42,
|
|
|
|
|
"pcie_link_gen_current": 1,
|
|
|
|
|
"pcie_link_width_current": 16,
|
|
|
|
|
"temperature_gpu": 39,
|
|
|
|
|
"utilization_gpu": 0,
|
|
|
|
|
"utilization_memory": 0,
|
|
|
|
|
},
|
|
|
|
|
time.Unix(0, 0)),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "GeForce GTX 1660 Ti",
|
|
|
|
|
filename: "gtx-1660-ti.xml",
|
|
|
|
|
expected: []telegraf.Metric{
|
|
|
|
|
testutil.MustMetric(
|
|
|
|
|
"nvidia_smi",
|
|
|
|
|
map[string]string{
|
|
|
|
|
"compute_mode": "Default",
|
|
|
|
|
"index": "0",
|
|
|
|
|
"name": "Graphics Device",
|
|
|
|
|
"pstate": "P8",
|
|
|
|
|
"uuid": "GPU-304a277d-3545-63b8-3a36-dfde3c992989",
|
|
|
|
|
},
|
|
|
|
|
map[string]interface{}{
|
|
|
|
|
"clocks_current_graphics": 300,
|
|
|
|
|
"clocks_current_memory": 405,
|
|
|
|
|
"clocks_current_sm": 300,
|
|
|
|
|
"clocks_current_video": 540,
|
2020-11-20 00:52:47 +08:00
|
|
|
"cuda_version": "10.1",
|
|
|
|
|
"driver_version": "418.43",
|
2019-11-13 08:13:30 +08:00
|
|
|
"encoder_stats_average_fps": 0,
|
|
|
|
|
"encoder_stats_average_latency": 0,
|
|
|
|
|
"encoder_stats_session_count": 0,
|
2020-06-09 01:00:36 +08:00
|
|
|
"fbc_stats_average_fps": 0,
|
|
|
|
|
"fbc_stats_average_latency": 0,
|
|
|
|
|
"fbc_stats_session_count": 0,
|
2019-11-13 08:13:30 +08:00
|
|
|
"fan_speed": 0,
|
|
|
|
|
"memory_free": 5912,
|
|
|
|
|
"memory_total": 5912,
|
|
|
|
|
"memory_used": 0,
|
|
|
|
|
"pcie_link_gen_current": 1,
|
|
|
|
|
"pcie_link_width_current": 16,
|
|
|
|
|
"power_draw": 8.93,
|
|
|
|
|
"temperature_gpu": 40,
|
|
|
|
|
"utilization_gpu": 0,
|
|
|
|
|
"utilization_memory": 1,
|
2020-06-09 01:00:36 +08:00
|
|
|
"utilization_encoder": 0,
|
|
|
|
|
"utilization_decoder": 0,
|
2019-11-13 08:13:30 +08:00
|
|
|
},
|
|
|
|
|
time.Unix(0, 0)),
|
|
|
|
|
},
|
2019-11-13 08:12:15 +08:00
|
|
|
},
|
2019-11-13 08:13:30 +08:00
|
|
|
{
|
|
|
|
|
name: "Quadro P400",
|
|
|
|
|
filename: "quadro-p400.xml",
|
|
|
|
|
expected: []telegraf.Metric{
|
|
|
|
|
testutil.MustMetric(
|
|
|
|
|
"nvidia_smi",
|
|
|
|
|
map[string]string{
|
|
|
|
|
"compute_mode": "Default",
|
|
|
|
|
"index": "0",
|
|
|
|
|
"name": "Quadro P400",
|
|
|
|
|
"pstate": "P8",
|
|
|
|
|
"uuid": "GPU-8f750be4-dfbc-23b9-b33f-da729a536494",
|
|
|
|
|
},
|
|
|
|
|
map[string]interface{}{
|
|
|
|
|
"clocks_current_graphics": 139,
|
|
|
|
|
"clocks_current_memory": 405,
|
|
|
|
|
"clocks_current_sm": 139,
|
|
|
|
|
"clocks_current_video": 544,
|
2020-11-20 00:52:47 +08:00
|
|
|
"cuda_version": "10.1",
|
|
|
|
|
"driver_version": "418.43",
|
2019-11-13 08:13:30 +08:00
|
|
|
"encoder_stats_average_fps": 0,
|
|
|
|
|
"encoder_stats_average_latency": 0,
|
|
|
|
|
"encoder_stats_session_count": 0,
|
2020-06-09 01:00:36 +08:00
|
|
|
"fbc_stats_average_fps": 0,
|
|
|
|
|
"fbc_stats_average_latency": 0,
|
|
|
|
|
"fbc_stats_session_count": 0,
|
2019-11-13 08:13:30 +08:00
|
|
|
"fan_speed": 34,
|
|
|
|
|
"memory_free": 1998,
|
|
|
|
|
"memory_total": 1998,
|
|
|
|
|
"memory_used": 0,
|
|
|
|
|
"pcie_link_gen_current": 1,
|
|
|
|
|
"pcie_link_width_current": 16,
|
|
|
|
|
"temperature_gpu": 33,
|
|
|
|
|
"utilization_gpu": 0,
|
|
|
|
|
"utilization_memory": 3,
|
2020-06-09 01:00:36 +08:00
|
|
|
"utilization_encoder": 0,
|
|
|
|
|
"utilization_decoder": 0,
|
2019-11-13 08:13:30 +08:00
|
|
|
},
|
|
|
|
|
time.Unix(0, 0)),
|
|
|
|
|
},
|
2019-11-13 08:12:15 +08:00
|
|
|
},
|
2023-04-27 04:00:14 +08:00
|
|
|
{
|
|
|
|
|
name: "Tesla T4",
|
|
|
|
|
filename: "tesla-t4.xml",
|
|
|
|
|
expected: []telegraf.Metric{
|
|
|
|
|
testutil.MustMetric(
|
|
|
|
|
"nvidia_smi",
|
|
|
|
|
map[string]string{
|
|
|
|
|
"compute_mode": "Default",
|
|
|
|
|
"index": "0",
|
|
|
|
|
"name": "Tesla T4",
|
|
|
|
|
"pstate": "P0",
|
|
|
|
|
"uuid": "GPU-d37e67a5-91dd-3774-a5cb-99096249601a",
|
|
|
|
|
},
|
|
|
|
|
map[string]interface{}{
|
|
|
|
|
"clocks_current_graphics": 585,
|
|
|
|
|
"clocks_current_memory": 5000,
|
|
|
|
|
"clocks_current_sm": 585,
|
|
|
|
|
"clocks_current_video": 810,
|
|
|
|
|
"cuda_version": "11.7",
|
|
|
|
|
"driver_version": "515.105.01",
|
|
|
|
|
"encoder_stats_average_fps": 0,
|
|
|
|
|
"encoder_stats_average_latency": 0,
|
|
|
|
|
"encoder_stats_session_count": 0,
|
|
|
|
|
"fbc_stats_average_fps": 0,
|
|
|
|
|
"fbc_stats_average_latency": 0,
|
|
|
|
|
"fbc_stats_session_count": 0,
|
|
|
|
|
"power_draw": 26.78,
|
|
|
|
|
"memory_free": 13939,
|
|
|
|
|
"memory_total": 15360,
|
|
|
|
|
"memory_used": 1032,
|
|
|
|
|
"memory_reserved": 388,
|
|
|
|
|
"retired_pages_multiple_single_bit": 0,
|
|
|
|
|
"retired_pages_double_bit": 0,
|
|
|
|
|
"retired_pages_blacklist": "No",
|
|
|
|
|
"retired_pages_pending": "No",
|
|
|
|
|
"pcie_link_gen_current": 3,
|
|
|
|
|
"pcie_link_width_current": 8,
|
|
|
|
|
"temperature_gpu": 40,
|
|
|
|
|
"utilization_gpu": 0,
|
|
|
|
|
"utilization_memory": 0,
|
|
|
|
|
"utilization_encoder": 0,
|
|
|
|
|
"utilization_decoder": 0,
|
|
|
|
|
},
|
|
|
|
|
time.Unix(0, 0)),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "A10G",
|
|
|
|
|
filename: "a10g.xml",
|
|
|
|
|
expected: []telegraf.Metric{
|
|
|
|
|
testutil.MustMetric(
|
|
|
|
|
"nvidia_smi",
|
|
|
|
|
map[string]string{
|
|
|
|
|
"compute_mode": "Default",
|
|
|
|
|
"index": "0",
|
|
|
|
|
"name": "NVIDIA A10G",
|
|
|
|
|
"pstate": "P8",
|
|
|
|
|
"uuid": "GPU-9a9a6c50-2a47-2f51-a902-b82c3b127e94",
|
|
|
|
|
},
|
|
|
|
|
map[string]interface{}{
|
|
|
|
|
"clocks_current_graphics": 210,
|
|
|
|
|
"clocks_current_memory": 405,
|
|
|
|
|
"clocks_current_sm": 210,
|
|
|
|
|
"clocks_current_video": 555,
|
|
|
|
|
"cuda_version": "11.7",
|
|
|
|
|
"driver_version": "515.105.01",
|
|
|
|
|
"encoder_stats_average_fps": 0,
|
|
|
|
|
"encoder_stats_average_latency": 0,
|
|
|
|
|
"encoder_stats_session_count": 0,
|
|
|
|
|
"fbc_stats_average_fps": 0,
|
|
|
|
|
"fbc_stats_average_latency": 0,
|
|
|
|
|
"fbc_stats_session_count": 0,
|
|
|
|
|
"fan_speed": 0,
|
|
|
|
|
"power_draw": 25.58,
|
|
|
|
|
"memory_free": 22569,
|
|
|
|
|
"memory_total": 23028,
|
|
|
|
|
"memory_used": 22,
|
|
|
|
|
"memory_reserved": 435,
|
|
|
|
|
"remapped_rows_correctable": 0,
|
|
|
|
|
"remapped_rows_uncorrectable": 0,
|
|
|
|
|
"remapped_rows_pending": "No",
|
|
|
|
|
"remapped_rows_failure": "No",
|
|
|
|
|
"pcie_link_gen_current": 1,
|
|
|
|
|
"pcie_link_width_current": 8,
|
|
|
|
|
"temperature_gpu": 17,
|
|
|
|
|
"utilization_gpu": 0,
|
|
|
|
|
"utilization_memory": 0,
|
|
|
|
|
"utilization_encoder": 0,
|
|
|
|
|
"utilization_decoder": 0,
|
|
|
|
|
},
|
|
|
|
|
time.Unix(0, 0)),
|
|
|
|
|
},
|
|
|
|
|
},
|
2023-07-29 03:38:35 +08:00
|
|
|
{
|
|
|
|
|
name: "RTC 3080 schema v12",
|
|
|
|
|
filename: "rtx-3080-v12.xml",
|
|
|
|
|
expected: []telegraf.Metric{
|
|
|
|
|
testutil.MustMetric(
|
|
|
|
|
"nvidia_smi",
|
|
|
|
|
map[string]string{
|
|
|
|
|
"compute_mode": "Default",
|
|
|
|
|
"index": "0",
|
|
|
|
|
"name": "NVIDIA GeForce RTX 3080",
|
|
|
|
|
"arch": "Ampere",
|
|
|
|
|
"pstate": "P8",
|
|
|
|
|
"uuid": "GPU-19d6d965-2acc-f646-00f8-4c76979aabb4",
|
|
|
|
|
},
|
|
|
|
|
map[string]interface{}{
|
|
|
|
|
"clocks_current_graphics": 210,
|
|
|
|
|
"clocks_current_memory": 405,
|
|
|
|
|
"clocks_current_sm": 210,
|
|
|
|
|
"clocks_current_video": 555,
|
|
|
|
|
"cuda_version": "12.2",
|
|
|
|
|
"driver_version": "536.40",
|
|
|
|
|
"encoder_stats_average_fps": 0,
|
|
|
|
|
"encoder_stats_average_latency": 0,
|
|
|
|
|
"encoder_stats_session_count": 0,
|
|
|
|
|
"fbc_stats_average_fps": 0,
|
|
|
|
|
"fbc_stats_average_latency": 0,
|
|
|
|
|
"fbc_stats_session_count": 0,
|
|
|
|
|
"fan_speed": 0,
|
|
|
|
|
"power_draw": 22.78,
|
|
|
|
|
"memory_free": 8938,
|
|
|
|
|
"memory_total": 10240,
|
|
|
|
|
"memory_used": 1128,
|
|
|
|
|
"memory_reserved": 173,
|
|
|
|
|
"pcie_link_gen_current": 4,
|
|
|
|
|
"pcie_link_width_current": 16,
|
|
|
|
|
"temperature_gpu": 31,
|
|
|
|
|
"utilization_gpu": 0,
|
|
|
|
|
"utilization_memory": 37,
|
|
|
|
|
"utilization_encoder": 0,
|
|
|
|
|
"utilization_decoder": 0,
|
|
|
|
|
},
|
|
|
|
|
time.Unix(1689872450, 0)),
|
|
|
|
|
},
|
|
|
|
|
},
|
2018-04-18 04:40:55 +08:00
|
|
|
}
|
2019-11-13 08:13:30 +08:00
|
|
|
for _, tt := range tests {
|
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
2021-09-29 05:16:32 +08:00
|
|
|
octets, err := os.ReadFile(filepath.Join("testdata", tt.filename))
|
2019-11-13 08:13:30 +08:00
|
|
|
require.NoError(t, err)
|
2018-05-09 04:11:12 +08:00
|
|
|
|
2023-07-29 03:38:35 +08:00
|
|
|
plugin := &NvidiaSMI{Log: &testutil.Logger{}}
|
2019-07-10 06:45:02 +08:00
|
|
|
|
2023-07-29 03:38:35 +08:00
|
|
|
var acc testutil.Accumulator
|
|
|
|
|
require.NoError(t, plugin.parse(&acc, octets))
|
2019-11-13 08:13:30 +08:00
|
|
|
testutil.RequireMetricsEqual(t, tt.expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
|
|
|
|
|
})
|
|
|
|
|
}
|
2019-07-10 06:45:02 +08:00
|
|
|
}
|