CPU 与调度60 条

PSI CPU 压力指标

Pressure Stall Information(内核 4.20+)在 /proc/pressure 下量化任务因等 CPU/IO/内存而停顿的比例,avg10/60/300 便于看趋势。

PSI 与 cpu 压力

PSI(Pressure Stall Information,内核 4.20 起)量化任务因为等资源而被迫停顿的比例,/proc/pressure/cpu 给出 CPU 侧视图。文件里 some avg10/avg60/avg300 是过去 10、60、300 秒内「至少有一个任务因等 CPU 而停下」的时间百分比,total 是自开机以来的累计微秒数。与 CPU 使用率不同,它衡量的是调度延迟造成的实际损失,因此常用来解释尾延迟恶化与容量不足。

基本信息

路径/proc/pressure/cpu;cgroup v2 下为 <组>/cpu.pressure
字段some(avg10/avg60/avg300/total);CPU 不提供 full
统计口径停顿时间百分比(avg)与累计微秒(total)
前提内核 CONFIG_PSI=y;部分版本需 psi=1 启动参数
生效范围全局文件给系统视图,cgroup 文件给该组视图
常用配套cpu.stat、load average、pidstat、mpstat

典型使用场景

  • 判断 CPU 是否真的成为瓶颈:使用率不高但 some 上升,说明调度延迟已在影响任务
  • 容器/服务级观测:读自己的 cpu.pressure,判断是否被同机邻居或限额拖慢
  • 尾延迟分析:把应用 P99 与 avg60 曲线对齐,验证延迟尖刺是否来自 CPU 争用
  • 容量规划:压测中记录不同并发下的 avg300,找出压力开始持续上扬的拐点
  • 与 load average 对比:load 含不可中断任务,PSI 只反映停顿,两者互为补充

查看与采样

查看与采样
cat /proc/pressure/cpu  # 看全局 some 行的 avg10/avg60/avg300 与 total
cat /sys/fs/cgroup/myapp.slice/cpu.pressure  # 只看该 cgroup 自己的压力视图
awk '/some/{print $1,$2,$3,$4}' /proc/pressure/cpu  # 精简输出,便于脚本采集
total1=$(awk '/some/{print $NF}' /proc/pressure/cpu | sed 's/total=//'); sleep 30
# 30 秒后再读一次做差分,得到本时段的停顿增量(绝对值没有意义)
mpstat -P ALL 1 3  # 与每核使用率交叉验证,确认是整体还是个别核的问题
cat /sys/fs/cgroup/myapp.slice/cpu.max  # 若在容器内,同时看限额是否过紧

字段读法

字段含义判读
some avg10最近 10 秒的停顿占比波动大,适合即时观察
some avg60最近 60 秒均值判断当前压力状态的主力指标
some avg300最近 300 秒均值看长期趋势与容量水位更稳
total累计停顿微秒必须两次采样求差,绝对值不说明现状
/proc/pressure/cpu 没有 full 行:CPU 上总会有任务在运行,内核因此只报告 some。需要「全体任务都被拖住」的语义时要去看 io 与 memory 的 pressure 文件。
PSI 与使用率是互补指标:使用率 100% 但任务都能按期望运行,some 可以很低;反过来使用率只有 60%、some 持续走高,说明存在明显的调度延迟。判断是否需要扩容,应看 some 的趋势而不是单看使用率。

易错点

  • 用 avg10 的瞬时波动下结论:短窗口抖动大,判断状态应结合 avg60/avg300 与持续时间
  • 找不到 full 行就以为文件坏了:CPU 侧本来只提供 some,这是内核设计而非配置错误
  • 在容器里读不到预期的组视图:需 cgroup v2 且路径/权限正确,否则读到的是宿主全局值,结论会失真
  • 把 PSI 当成替代使用率的单一指标:它只刻画停顿,不告诉你 CPU 花在哪里,仍需 mpstat/perf 下钻
  • 文件不存在就怀疑内核有问题:先确认版本、CONFIG_PSI 与 psi 启动参数,老内核对 PSI 支持有限

数据来源与参考

  • Linux 内核 Documentation/accounting/psi.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌