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: case dataCh <- data:
default: // 满了就丢弃 default: // 满了就丢弃
} }
// 每 10 轮触发一次 GC,减少内存占用
runtime.GC()
} }
} }
@@ -1162,37 +1165,50 @@ func collectGPUs() []GPUInfo {
switch runtime.GOOS { switch runtime.GOOS {
case "windows": case "windows":
gpus := tryNvidiaSMI() gpus := tryNvidiaSMI()
if len(gpus) > 0 {
return gpus
}
wmi := tryWMIGPU() wmi := tryWMIGPU()
return mergeGPULists(gpus, wmi) return filterPCIeGPUs(wmi)
case "linux": case "linux":
gpus := tryNvidiaSMI() gpus := tryNvidiaSMI()
if len(gpus) > 0 {
return gpus
}
lspci := tryLinuxGPU() lspci := tryLinuxGPU()
return mergeGPULists(gpus, lspci) return filterPCIeGPUs(lspci)
case "darwin": case "darwin":
gpus := tryNvidiaSMI() gpus := tryNvidiaSMI()
mac := tryMacGPU() mac := tryMacGPU()
return mergeGPULists(gpus, mac) return filterPCIeGPUs(append(gpus, mac...))
} }
return tryNvidiaSMI() return tryNvidiaSMI()
} }
func mergeGPULists(nvidia, fallback []GPUInfo) []GPUInfo { func filterPCIeGPUs(gpus []GPUInfo) []GPUInfo {
if len(nvidia) == 0 { var result []GPUInfo
return fallback for _, g := range gpus {
} if !isVirtualGPU(g.Name) {
if len(fallback) == 0 { result = append(result, g)
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)
} }
} }
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 { func tryNvidiaSMI() []GPUInfo {