阿里云 ECS 上 Ubuntu 22.04,编译一个 go 项目比本地慢四倍,lscpu 里 CPU MHz 一直停在 800,cpupower frequency-info 显示 governor 是 powersave,机器负载并不低。
一开始怀疑是「虚拟化下 intel_pstate 不可用,退化到 acpi-cpufreq 后策略更保守」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。云主机的频率由宿主机管理,实例里看到的 governor 只是表层。少数情况下是镜像默认带了节能策略,负载上来也不主动升频。
不容易想到的是,cgroup 的 CPU 限额让调频器误判当前负载。
动手时先看当前策略和可用频率
cpupower frequency-info | grep -E 'governor|current policy|available'
再往下切到 performance 观察频率
cpupower frequency-set -g performance && grep 'cpu MHz' /proc/cpuinfo | head -4
随后确认是不是虚拟化环境
systemd-detect-virt && lscpu | grep -E 'Hypervisor|Model name'
压测对比两种策略的耗时
sysbench cpu --threads=4 --time=30 run | grep 'events per second'
别只看报错消失,验证要多做一步。governor 显示 performance,压测时 cpu MHz 升到基频以上,同样的编译任务耗时降到原来的三分之一。
云主机调 governor 多半是心理安慰,真正决定频率的是宿主机;换了策略频率仍然不动,就直接开工单查 CPU 配额。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
