fix: client only collect PCIe GPUs, filter virtual/integrated GPUs, add GC for memory optimization

This commit is contained in:
ngfchl
2026-06-21 10:03:19 +08:00
parent b412b8f9d1
commit 5ef7937d3c
+34 -18
View File
@@ -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 {