Support mutli CPU and multi GPU systems
This commit is contained in:
parent
c06d5dcdd4
commit
ff7b0a3a70
33
main.go
33
main.go
@ -47,8 +47,8 @@ func main() {
|
||||
defer ticker.Stop()
|
||||
|
||||
log.Printf("Starting idle monitoring. System will suspend when:\n")
|
||||
log.Printf("- CPU usage < %.1f%%\n", cpuThreshold)
|
||||
log.Printf("- GPU usage < %.1f%%\n", gpuThreshold)
|
||||
log.Printf("- Average CPU usage across all cores < %.1f%%\n", cpuThreshold)
|
||||
log.Printf("- Average GPU usage across all GPUs < %.1f%%\n", gpuThreshold)
|
||||
log.Printf("- Disk I/O < %.1f MB/s\n", float64(diskThreshold)/(1024*1024))
|
||||
log.Printf("- Network I/O < %.1f MB/s\n", float64(networkThreshold)/(1024*1024))
|
||||
log.Printf("Over the last %v\n", monitoringPeriod)
|
||||
@ -80,21 +80,34 @@ func getCurrentUsage() ResourceUsage {
|
||||
timestamp: time.Now(),
|
||||
}
|
||||
|
||||
// Get CPU usage
|
||||
if cpuPercent, err := cpu.Percent(0, false); err == nil && len(cpuPercent) > 0 {
|
||||
usage.cpuUsage = cpuPercent[0]
|
||||
// Get CPU usage across all cores
|
||||
if cpuPercent, err := cpu.Percent(0, true); err == nil && len(cpuPercent) > 0 {
|
||||
// Calculate average CPU usage across all cores
|
||||
var totalCPU float64
|
||||
for _, percent := range cpuPercent {
|
||||
totalCPU += percent
|
||||
}
|
||||
usage.cpuUsage = totalCPU / float64(len(cpuPercent))
|
||||
}
|
||||
|
||||
// Get GPU usage
|
||||
// Get GPU usage across all GPUs
|
||||
count, ret := nvml.DeviceGetCount()
|
||||
if ret == nvml.SUCCESS && count > 0 {
|
||||
device, ret := nvml.DeviceGetHandleByIndex(0)
|
||||
if ret == nvml.SUCCESS {
|
||||
utilization, ret := device.GetUtilizationRates()
|
||||
var totalGPU float64
|
||||
var activeGPUs int
|
||||
for i := 0; i < count; i++ {
|
||||
device, ret := nvml.DeviceGetHandleByIndex(i)
|
||||
if ret == nvml.SUCCESS {
|
||||
usage.gpuUsage = float64(utilization.Gpu)
|
||||
utilization, ret := device.GetUtilizationRates()
|
||||
if ret == nvml.SUCCESS {
|
||||
totalGPU += float64(utilization.Gpu)
|
||||
activeGPUs++
|
||||
}
|
||||
}
|
||||
}
|
||||
if activeGPUs > 0 {
|
||||
usage.gpuUsage = totalGPU / float64(activeGPUs)
|
||||
}
|
||||
}
|
||||
|
||||
// Get disk I/O
|
||||
|
Loading…
x
Reference in New Issue
Block a user