第 5 章
CPU 性能排查经验文档
·约 5 分钟
CPU 性能排查经验文档
适用场景:Linux 工作站 / CPU 异常降频
测试环境:Ubuntu 18 · Intel i9-9820X · RTX 2080Ti · PyTorch 2.5
一、问题描述
在运行 PyTorch 训练任务时,发现训练速度异常缓慢。通过监控 CPU 频率,发现所有核心均锁定在最低频率 1200 MHz,远低于标称的 3.3 GHz 基频和 4.2 GHz 睿频。
watch -n 1 "cat /proc/cpuinfo | grep 'cpu MHz'"
输出示例(异常状态):
cpu MHz : 1200.131
cpu MHz : 1200.238
cpu MHz : 1200.045
...(共 20 核,全部约 1200 MHz)
二、排查流程
Step 1:确认 CPU 基本信息
lscpu
关键字段确认:
CPU 最小 MHz: 1200— 与实测频率吻合,说明 CPU 被锁在最低频CPU 最大 MHz: 4200— 睿频未被触发每个核的线程数: 2 / 每个座的核数: 10— 10 核 20 线程
Step 2:排查是否为过热降频
高 TDP 处理器(i9-9820X 为 165W)在散热不良时会触发热保护降频。
# 安装温度监控工具
sudo apt install lm-sensors
# 查看各核温度
sensors
本案例结果(正常):
Package id 0: +32.0°C (high = +100.0°C, crit = +110.0°C)
Core 1: +28.0°C
Core 2: +29.0°C
...
✅ 温度 28~32°C,散热完全正常,排除过热降频。
若温度超过 90°C: 大概率是硅脂老化,建议更换导热硅脂(信越 7921 / Arctic MX-6 等),一般 3~5 年需更换一次。
Step 3:检查 CPU 调频策略(根因)
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
本案例结果(异常):
powersave
🔴 根因确认: powersave 模式会强制 CPU 运行在最低频率,与负载和温度无关。
三、解决方案
临时修复(立即生效)
# 切换所有核心到 performance 模式
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 验证
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# 预期输出: performance
# 观察频率恢复
watch -n 1 "cat /proc/cpuinfo | grep 'cpu MHz'"
修复后频率应动态拉升至 3.3 ~ 4.2 GHz。
永久修复(重启后依然生效)
sudo apt install cpufrequtils
sudo nano /etc/default/cpufrequtils
写入以下内容:
GOVERNOR="performance"
保存后重启服务:
sudo systemctl restart cpufrequtils
四、调频策略说明
| Governor | 行为 | 适用场景 |
|---|---|---|
performance | 始终跑最高频率 | 深度学习训练、高性能计算 |
powersave | 始终跑最低频率 | 节能、待机服务器 |
ondemand | 按负载动态调频 | 通用服务器 |
schedutil | 内核调度器联动调频 | 现代 Linux 推荐默认 |
深度学习服务器推荐使用
performance模式,避免 DataLoader 预处理阶段因频率未及时拉升而造成 GPU 等待。
五、排查决策树
CPU 频率异常偏低
│
├─ 查看温度 (sensors)
│ │
│ ├─ 温度 > 90°C ──→ 散热问题,考虑更换硅脂 / 清灰
│ │
│ └─ 温度正常 ──→ 继续排查
│
├─ 查看调频策略 (scaling_governor)
│ │
│ ├─ powersave ──→ 切换为 performance ✅
│ │
│ └─ performance 但频率仍低 ──→ 检查 BIOS 设置 / TDP 限制
│
└─ 压力测试验证 (stress --cpu 4)
│
└─ 加压后频率不升 ──→ 可能存在硬件故障或 BIOS 锁频
六、常用监控命令速查
# 实时频率监控
watch -n 1 "cat /proc/cpuinfo | grep 'cpu MHz'"
# CPU 温度
sensors
# 当前调频策略
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# 所有核心调频策略
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor | sort -u
# CPU 压力测试(需安装 stress)
sudo apt install stress
stress --cpu 8 --timeout 30s
# 查看 CPU 详细信息
lscpu