diff --git a/sysfs/class_drm_amdgpu.go b/sysfs/class_drm_amdgpu.go index 7cd7e651..7ebfa05a 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. @@ -65,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 } @@ -117,6 +135,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..70236f6e 100644 --- a/sysfs/class_drm_amdgpu_test.go +++ b/sysfs/class_drm_amdgpu_test.go @@ -46,16 +46,8 @@ func TestClassDRMCardAMDGPUStats(t *testing.T) { MemoryVRAMVendor: "samsung", PowerDPMForcePerformanceLevel: "manual", UniqueID: "0123456789abcdef", - }, - { - Name: "card1", - GPUBusyPercent: 0, - MemoryGTTSize: 0, - MemoryGTTUsed: 0, - MemoryVisibleVRAMSize: 0, - MemoryVisibleVRAMUsed: 0, - MemoryVRAMSize: 0, - MemoryVRAMUsed: 0, + DevName: "device", + DevType: "card0", }, }