45 lines
834 B
Go
45 lines
834 B
Go
//go:build linux
|
|
// +build linux
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"strings"
|
|
|
|
"github.com/jaypipes/ghw"
|
|
"k8s.io/klog/v2"
|
|
"k8s.io/utils/ptr"
|
|
)
|
|
|
|
func GetGpuInfo() (*string, error) {
|
|
gpu, err := ghw.GPU(ghw.WithAlerter(log.New(io.Discard, "", 0))) // discard warnings
|
|
if err != nil {
|
|
klog.Errorf("Error getting GPU info: %v", err)
|
|
return nil, err
|
|
}
|
|
|
|
var first string
|
|
for _, card := range gpu.GraphicsCards {
|
|
if card.DeviceInfo == nil || card.DeviceInfo.Vendor == nil || card.DeviceInfo.Product == nil {
|
|
continue
|
|
}
|
|
info := fmt.Sprintf("%s %s", card.DeviceInfo.Vendor.Name, card.DeviceInfo.Product.Name)
|
|
if strings.Contains(strings.ToLower(info), "nvidia") {
|
|
return ptr.To(info), nil
|
|
}
|
|
|
|
if first == "" {
|
|
first = info
|
|
}
|
|
}
|
|
|
|
if first == "" {
|
|
return nil, nil
|
|
}
|
|
|
|
return ptr.To(first), nil
|
|
}
|