From fd59d5549962d63534ac1c5bb436d2d0f5c35e64 Mon Sep 17 00:00:00 2001 From: Xinyang Chen Date: Tue, 9 Jun 2020 01:00:36 +0800 Subject: [PATCH] Add video codec stats to nvidia-smi (#7646) --- plugins/inputs/nvidia_smi/README.md | 2 ++ plugins/inputs/nvidia_smi/nvidia_smi.go | 19 +++++++++++++++++-- plugins/inputs/nvidia_smi/nvidia_smi_test.go | 10 ++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/plugins/inputs/nvidia_smi/README.md b/plugins/inputs/nvidia_smi/README.md index 892381cd5..0afe81763 100644 --- a/plugins/inputs/nvidia_smi/README.md +++ b/plugins/inputs/nvidia_smi/README.md @@ -38,6 +38,8 @@ You'll need to escape the `\` within the `telegraf.conf` like this: `C:\\Program - `temperature_gpu` (integer, degrees C) - `utilization_gpu` (integer, percentage) - `utilization_memory` (integer, percentage) + - `utilization_encoder` (integer, percentage) + - `utilization_decoder` (integer, percentage) - `pcie_link_gen_current` (integer) - `pcie_link_width_current` (integer) - `encoder_stats_session_count` (integer) diff --git a/plugins/inputs/nvidia_smi/nvidia_smi.go b/plugins/inputs/nvidia_smi/nvidia_smi.go index b21e390c6..688c3d4bb 100644 --- a/plugins/inputs/nvidia_smi/nvidia_smi.go +++ b/plugins/inputs/nvidia_smi/nvidia_smi.go @@ -116,11 +116,16 @@ func (s *SMI) genTagsFields() []metric { setIfUsed("int", fields, "temperature_gpu", gpu.Temp.GPUTemp) setIfUsed("int", fields, "utilization_gpu", gpu.Utilization.GPU) setIfUsed("int", fields, "utilization_memory", gpu.Utilization.Memory) + setIfUsed("int", fields, "utilization_encoder", gpu.Utilization.Encoder) + setIfUsed("int", fields, "utilization_decoder", gpu.Utilization.Decoder) setIfUsed("int", fields, "pcie_link_gen_current", gpu.PCI.LinkInfo.PCIEGen.CurrentLinkGen) setIfUsed("int", fields, "pcie_link_width_current", gpu.PCI.LinkInfo.LinkWidth.CurrentLinkWidth) setIfUsed("int", fields, "encoder_stats_session_count", gpu.Encoder.SessionCount) setIfUsed("int", fields, "encoder_stats_average_fps", gpu.Encoder.AverageFPS) setIfUsed("int", fields, "encoder_stats_average_latency", gpu.Encoder.AverageLatency) + setIfUsed("int", fields, "fbc_stats_session_count", gpu.FBC.SessionCount) + setIfUsed("int", fields, "fbc_stats_average_fps", gpu.FBC.AverageFPS) + setIfUsed("int", fields, "fbc_stats_average_latency", gpu.FBC.AverageLatency) setIfUsed("int", fields, "clocks_current_graphics", gpu.Clocks.Graphics) setIfUsed("int", fields, "clocks_current_sm", gpu.Clocks.SM) setIfUsed("int", fields, "clocks_current_memory", gpu.Clocks.Memory) @@ -185,6 +190,7 @@ type GPU []struct { Power PowerReadings `xml:"power_readings"` PCI PCI `xml:"pci"` Encoder EncoderStats `xml:"encoder_stats"` + FBC FBCStats `xml:"fbc_stats"` Clocks ClockStats `xml:"clocks"` } @@ -202,8 +208,10 @@ type TempStats struct { // UtilizationStats defines the structure of the utilization portion of the smi output. type UtilizationStats struct { - GPU string `xml:"gpu_util"` // int - Memory string `xml:"memory_util"` // int + GPU string `xml:"gpu_util"` // int + Memory string `xml:"memory_util"` // int + Encoder string `xml:"encoder_util"` // int + Decoder string `xml:"decoder_util"` // int } // PowerReadings defines the structure of the power_readings portion of the smi output. @@ -230,6 +238,13 @@ type EncoderStats struct { AverageLatency string `xml:"average_latency"` // int } +// FBCStats defines the structure of the fbc_stats portion of the smi output. +type FBCStats struct { + SessionCount string `xml:"session_count"` // int + AverageFPS string `xml:"average_fps"` // int + AverageLatency string `xml:"average_latency"` // int +} + // ClockStats defines the structure of the clocks portion of the smi output. type ClockStats struct { Graphics string `xml:"graphics_clock"` // int diff --git a/plugins/inputs/nvidia_smi/nvidia_smi_test.go b/plugins/inputs/nvidia_smi/nvidia_smi_test.go index 6fd37b570..3c191e609 100644 --- a/plugins/inputs/nvidia_smi/nvidia_smi_test.go +++ b/plugins/inputs/nvidia_smi/nvidia_smi_test.go @@ -72,6 +72,9 @@ func TestGatherValidXML(t *testing.T) { "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, @@ -82,6 +85,8 @@ func TestGatherValidXML(t *testing.T) { "temperature_gpu": 40, "utilization_gpu": 0, "utilization_memory": 1, + "utilization_encoder": 0, + "utilization_decoder": 0, }, time.Unix(0, 0)), }, @@ -107,6 +112,9 @@ func TestGatherValidXML(t *testing.T) { "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, @@ -116,6 +124,8 @@ func TestGatherValidXML(t *testing.T) { "temperature_gpu": 33, "utilization_gpu": 0, "utilization_memory": 3, + "utilization_encoder": 0, + "utilization_decoder": 0, }, time.Unix(0, 0)), },