From 761443535046d07d83da8d858d42112bfc53012a Mon Sep 17 00:00:00 2001 From: Alliballibaba Date: Thu, 16 Jan 2025 12:35:36 +0100 Subject: [PATCH] Uses go's monotonic clock instead. --- internal/cpu/cpu_unix.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/internal/cpu/cpu_unix.go b/internal/cpu/cpu_unix.go index a74bff336..ae97efc30 100644 --- a/internal/cpu/cpu_unix.go +++ b/internal/cpu/cpu_unix.go @@ -16,11 +16,11 @@ var cpuCount = runtime.GOMAXPROCS(0) // if CPUs are not busy, most threads are likely waiting for I/O, so we should scale // if CPUs are already busy we won't gain much by scaling and want to avoid the overhead of doing so func ProbeCPUs(probeTime time.Duration, maxCPUUsage float64, abort chan struct{}) bool { - var start, end, cpuStart, cpuEnd C.struct_timespec + var cpuStart, cpuEnd C.struct_timespec // note: clock_gettime is a POSIX function // on Windows we'd need to use QueryPerformanceCounter instead - C.clock_gettime(C.CLOCK_MONOTONIC, &start) + start := time.Now() C.clock_gettime(C.CLOCK_PROCESS_CPUTIME_ID, &cpuStart) select { @@ -29,12 +29,11 @@ func ProbeCPUs(probeTime time.Duration, maxCPUUsage float64, abort chan struct{} case <-time.After(probeTime): } - C.clock_gettime(C.CLOCK_MONOTONIC, &end) C.clock_gettime(C.CLOCK_PROCESS_CPUTIME_ID, &cpuEnd) - - elapsedTime := float64(end.tv_sec-start.tv_sec)*1e9 + float64(end.tv_nsec-start.tv_nsec) + elapsedTime := float64(time.Since(start).Nanoseconds()) elapsedCpuTime := float64(cpuEnd.tv_sec-cpuStart.tv_sec)*1e9 + float64(cpuEnd.tv_nsec-cpuStart.tv_nsec) cpuUsage := elapsedCpuTime / elapsedTime / float64(cpuCount) + println("CPU usage:", int(cpuUsage*100)) return cpuUsage < maxCPUUsage }