feat: dynamic CPU governor (performance during tasks, powersave at idle)

Switch to performance governor when task queue starts processing,
back to powersave when queue drains. Removes bee-cpuperf.service.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-28 21:47:11 +03:00
parent 5d72d48714
commit 0dbfaf6121
3 changed files with 16 additions and 13 deletions

View File

@@ -5,6 +5,8 @@ import (
"encoding/json"
"fmt"
"net/http"
"os"
"path/filepath"
"sort"
"sync"
"time"
@@ -179,6 +181,7 @@ func (q *taskQueue) startWorker(opts *HandlerOptions) {
func (q *taskQueue) worker() {
for {
<-q.trigger
setCPUGovernor("performance")
for {
q.mu.Lock()
t := q.nextPending()
@@ -211,6 +214,19 @@ func (q *taskQueue) worker() {
q.prune()
q.mu.Unlock()
}
setCPUGovernor("powersave")
}
}
// setCPUGovernor writes the given governor to all CPU scaling_governor sysfs files.
// Silently ignores errors (e.g. when cpufreq is not available).
func setCPUGovernor(governor string) {
matches, err := filepath.Glob("/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor")
if err != nil || len(matches) == 0 {
return
}
for _, path := range matches {
_ = os.WriteFile(path, []byte(governor), 0644)
}
}

View File

@@ -1,12 +0,0 @@
[Unit]
Description=Set CPU governor to performance
DefaultDependencies=no
After=sysinit.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f "$f" ] && echo performance > "$f"; done'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

View File

@@ -1 +0,0 @@
/etc/systemd/system/bee-cpuperf.service