fix: client only collect PCIe GPUs, filter virtual/integrated GPUs, add GC for memory optimization
This commit is contained in:
+34
-18
@@ -981,6 +981,9 @@ func collectLoop(done <-chan struct{}, wsURL, name string, interval time.Duratio
|
||||
case dataCh <- data:
|
||||
default: // 满了就丢弃
|
||||
}
|
||||
|
||||
// 每 10 轮触发一次 GC,减少内存占用
|
||||
runtime.GC()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1162,37 +1165,50 @@ func collectGPUs() []GPUInfo {
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
gpus := tryNvidiaSMI()
|
||||
if len(gpus) > 0 {
|
||||
return gpus
|
||||
}
|
||||
wmi := tryWMIGPU()
|
||||
return mergeGPULists(gpus, wmi)
|
||||
return filterPCIeGPUs(wmi)
|
||||
case "linux":
|
||||
gpus := tryNvidiaSMI()
|
||||
if len(gpus) > 0 {
|
||||
return gpus
|
||||
}
|
||||
lspci := tryLinuxGPU()
|
||||
return mergeGPULists(gpus, lspci)
|
||||
return filterPCIeGPUs(lspci)
|
||||
case "darwin":
|
||||
gpus := tryNvidiaSMI()
|
||||
mac := tryMacGPU()
|
||||
return mergeGPULists(gpus, mac)
|
||||
return filterPCIeGPUs(append(gpus, mac...))
|
||||
}
|
||||
return tryNvidiaSMI()
|
||||
}
|
||||
|
||||
func mergeGPULists(nvidia, fallback []GPUInfo) []GPUInfo {
|
||||
if len(nvidia) == 0 {
|
||||
return fallback
|
||||
}
|
||||
if len(fallback) == 0 {
|
||||
return nvidia
|
||||
}
|
||||
exist := make(map[string]bool)
|
||||
for _, g := range nvidia {
|
||||
exist[g.Name] = true
|
||||
}
|
||||
for _, g := range fallback {
|
||||
if !exist[g.Name] {
|
||||
nvidia = append(nvidia, g)
|
||||
func filterPCIeGPUs(gpus []GPUInfo) []GPUInfo {
|
||||
var result []GPUInfo
|
||||
for _, g := range gpus {
|
||||
if !isVirtualGPU(g.Name) {
|
||||
result = append(result, g)
|
||||
}
|
||||
}
|
||||
return nvidia
|
||||
return result
|
||||
}
|
||||
|
||||
func isVirtualGPU(name string) bool {
|
||||
name = strings.ToLower(name)
|
||||
blacklist := []string{
|
||||
"microsoft", "basic render", "vmware", "virtual", "hyper-v",
|
||||
"parallels", "virtualbox", "intel", "remote", "rdp", "citrix",
|
||||
"teamviewer", "anydesk", "parsec", "splashtop", "oray",
|
||||
"sunlogin", "todesk", "amdgpu-pro",
|
||||
}
|
||||
for _, v := range blacklist {
|
||||
if strings.Contains(name, v) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func tryNvidiaSMI() []GPUInfo {
|
||||
|
||||
Reference in New Issue
Block a user