telegraf/plugins/inputs/nvidia_smi/nvidia_smi_test.go

288 lines
9.6 KiB
Go

package nvidia_smi
import (
"os"
"path/filepath"
"testing"
"time"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/require"
)
func TestGatherValidXML(t *testing.T) {
tests := []struct {
name string
filename string
expected []telegraf.Metric
}{
{
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,
"cuda_version": "10.1",
"driver_version": "418.43",
"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,
"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,
"utilization_encoder": 0,
"utilization_decoder": 0,
},
time.Unix(0, 0)),
},
},
{
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,
"cuda_version": "10.1",
"driver_version": "418.43",
"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": 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,
"utilization_encoder": 0,
"utilization_decoder": 0,
},
time.Unix(0, 0)),
},
},
{
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)),
},
},
{
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)),
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
octets, err := os.ReadFile(filepath.Join("testdata", tt.filename))
require.NoError(t, err)
plugin := &NvidiaSMI{Log: &testutil.Logger{}}
var acc testutil.Accumulator
require.NoError(t, plugin.parse(&acc, octets))
testutil.RequireMetricsEqual(t, tt.expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
})
}
}