summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/intelgpu/charts.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/go/collectors/go.d.plugin/modules/intelgpu/charts.go')
-rw-r--r--src/go/collectors/go.d.plugin/modules/intelgpu/charts.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/intelgpu/charts.go b/src/go/collectors/go.d.plugin/modules/intelgpu/charts.go
new file mode 100644
index 000000000..93670633c
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/intelgpu/charts.go
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package intelgpu
+
+import (
+ "fmt"
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+)
+
+const (
+ prioGPUFrequency = module.Priority + iota
+ prioGPUPower
+ prioGPUEngineBusy
+)
+
+var charts = module.Charts{
+ intelGPUFrequencyChart.Copy(),
+ intelGPUPowerGPUChart.Copy(),
+}
+
+var intelGPUFrequencyChart = module.Chart{
+ ID: "igpu_frequency",
+ Title: "Intel GPU frequency",
+ Units: "MHz",
+ Fam: "frequency",
+ Ctx: "intelgpu.frequency",
+ Type: module.Line,
+ Priority: prioGPUFrequency,
+ Dims: module.Dims{
+ {ID: "frequency_actual", Name: "frequency", Div: precision},
+ },
+}
+
+var intelGPUPowerGPUChart = module.Chart{
+ ID: "igpu_power_gpu",
+ Title: "Intel GPU power",
+ Units: "Watts",
+ Fam: "power",
+ Ctx: "intelgpu.power",
+ Type: module.Line,
+ Priority: prioGPUPower,
+ Dims: module.Dims{
+ {ID: "power_gpu", Name: "gpu", Div: precision},
+ {ID: "power_package", Name: "package", Div: precision},
+ },
+}
+
+var intelGPUEngineBusyPercChartTmpl = module.Chart{
+ ID: "igpu_engine_%s_busy_percentage",
+ Title: "Intel GPU engine busy time percentage",
+ Units: "percentage",
+ Fam: "engines",
+ Ctx: "intelgpu.engine_busy_perc",
+ Type: module.Line,
+ Priority: prioGPUEngineBusy,
+ Dims: module.Dims{
+ {ID: "engine_%s_busy", Name: "busy", Div: precision},
+ },
+}
+
+func (ig *IntelGPU) addEngineCharts(engine string) {
+ chart := intelGPUEngineBusyPercChartTmpl.Copy()
+
+ s := strings.ToLower(engine)
+ s = strings.ReplaceAll(s, "/", "_")
+
+ chart.ID = fmt.Sprintf(chart.ID, s)
+ chart.Labels = []module.Label{
+ {Key: "engine_class", Value: engineClassName(engine)},
+ {Key: "engine_instance", Value: engine},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, engine)
+ }
+
+ if err := ig.Charts().Add(chart); err != nil {
+ ig.Warning(err)
+ }
+}
+
+func engineClassName(engine string) string {
+ // https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/tools/intel_gpu_top.c#L431
+ engines := []string{"Render/3D", "Blitter", "VideoEnhance", "Video", "Compute"}
+ for _, name := range engines {
+ if strings.HasPrefix(engine, name) {
+ return name
+ }
+ }
+ return "unknown"
+}