From cffbc6514fc800b17affe0dbb1dee3d54d099560 Mon Sep 17 00:00:00 2001 From: Deezzir Date: Mon, 3 Nov 2025 18:43:50 -0500 Subject: [PATCH 1/2] feat: add `devName` and `devType` to DRM GPU stats Signed-off-by: Deezzir --- sysfs/class_drm_amdgpu.go | 20 ++++++++++++++++++++ sysfs/class_drm_amdgpu_test.go | 2 ++ 2 files changed, 22 insertions(+) diff --git a/sysfs/class_drm_amdgpu.go b/sysfs/class_drm_amdgpu.go index 7cd7e651..fceac161 100644 --- a/sysfs/class_drm_amdgpu.go +++ b/sysfs/class_drm_amdgpu.go @@ -21,6 +21,7 @@ import ( "fmt" "path/filepath" "regexp" + "strings" "syscall" "github.com/prometheus/procfs/internal/util" @@ -47,6 +48,21 @@ type ClassDRMCardAMDGPUStats struct { MemoryVRAMVendor string // The VRAM vendor name. PowerDPMForcePerformanceLevel string // The current power performance level. UniqueID string // The unique ID of the GPU that will persist from machine to machine. + DevName string // The device name. + DevType string // The device type. +} + +// readDev reads the device name and type from the "device" symlink in the given directory. +func readDevInfo(dir string) (string, string, error) { + devicePath, devErr := filepath.EvalSymlinks(filepath.Join(dir, "device")) + if devErr == nil { + devPathPrefix, devName := filepath.Split(devicePath) + _, devType := filepath.Split(strings.TrimRight(devPathPrefix, "/")) + + return devName, devType, nil + } + + return "", "", devErr } // ClassDRMCardAMDGPUStats returns DRM card metrics for all amdgpu cards. @@ -117,6 +133,10 @@ func parseClassDRMAMDGPUCard(card string) (ClassDRMCardAMDGPUStats, error) { if v, err := readDRMCardField(card, "unique_id"); err == nil { stats.UniqueID = v } + if n, t, err := readDevInfo(card); err == nil { + stats.DevName = n + stats.DevType = t + } return stats, nil } diff --git a/sysfs/class_drm_amdgpu_test.go b/sysfs/class_drm_amdgpu_test.go index 1386b005..7f8d98fd 100644 --- a/sysfs/class_drm_amdgpu_test.go +++ b/sysfs/class_drm_amdgpu_test.go @@ -46,6 +46,8 @@ func TestClassDRMCardAMDGPUStats(t *testing.T) { MemoryVRAMVendor: "samsung", PowerDPMForcePerformanceLevel: "manual", UniqueID: "0123456789abcdef", + DevName: "device", + DevType: "card0", }, { Name: "card1", From d49dc612ef1bccfc7b6cea4e114b775eacfd549f Mon Sep 17 00:00:00 2001 From: Deezzir Date: Mon, 3 Nov 2025 18:46:30 -0500 Subject: [PATCH 2/2] fix: don't export empty drm card stats Signed-off-by: Deezzir --- sysfs/class_drm_amdgpu.go | 6 ++++-- sysfs/class_drm_amdgpu_test.go | 10 ---------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/sysfs/class_drm_amdgpu.go b/sysfs/class_drm_amdgpu.go index fceac161..7ebfa05a 100644 --- a/sysfs/class_drm_amdgpu.go +++ b/sysfs/class_drm_amdgpu.go @@ -81,8 +81,10 @@ func (fs FS) ClassDRMCardAMDGPUStats() ([]ClassDRMCardAMDGPUStats, error) { } return nil, err } - cardStats.Name = filepath.Base(card) - stats = append(stats, cardStats) + if cardStats != (ClassDRMCardAMDGPUStats{}) { + cardStats.Name = filepath.Base(card) + stats = append(stats, cardStats) + } } return stats, nil } diff --git a/sysfs/class_drm_amdgpu_test.go b/sysfs/class_drm_amdgpu_test.go index 7f8d98fd..70236f6e 100644 --- a/sysfs/class_drm_amdgpu_test.go +++ b/sysfs/class_drm_amdgpu_test.go @@ -49,16 +49,6 @@ func TestClassDRMCardAMDGPUStats(t *testing.T) { DevName: "device", DevType: "card0", }, - { - Name: "card1", - GPUBusyPercent: 0, - MemoryGTTSize: 0, - MemoryGTTUsed: 0, - MemoryVisibleVRAMSize: 0, - MemoryVisibleVRAMUsed: 0, - MemoryVRAMSize: 0, - MemoryVRAMUsed: 0, - }, } if diff := cmp.Diff(classDRMCardStats, drmTest); diff != "" {