首页/系统/Linux 内核与性能调优速查/perf sched 调度延迟分析

perf sched 调度延迟分析

记录调度事件并汇总等待与调度延迟, 定位运行队列竞争与唤醒延迟问题。

调度延迟分析

调度延迟分析记录内核的调度事件,然后汇总每个任务的等待时间与唤醒延迟:前者是可运行但迟迟拿不到处理器的时间,后者是被唤醒到真正开始运行的时间。它们直接对应「机器不忙但请求慢」这类现象,是排查尾延迟与不规律卡顿的重要方向。

基本信息

适用平台Linux(内核自带性能工具)
采集方式记录调度事件到文件,再离线汇总
汇总视图延迟表、时间线视图与逐次明细
关键指标等待延迟与唤醒延迟的最大值与平均值
开销提示全系统长时间记录的数据量与开销都较大

典型使用场景

  • 服务吞吐正常但尾延迟高,怀疑任务在队列里排队。
  • 核对绑核与优先级调整是否真的降低了等待时间。
  • 与运行队列延迟工具交叉验证,确认结论一致。
  • 排查定时任务与业务进程互相挤占造成的抖动。
  • 确认切换频繁是负载特征还是配置问题。

记录与报告

记录与报告
perf sched record -- sleep 10           # 记录 10 秒调度事件
perf sched latency --sort max | head -30   # 按等待时间排序,先看最差的任务
perf sched map                          # 时间线视图,观察上下文切换过程
perf sched timehist | head -30          # 逐次唤醒与等待明细
perf sched record -p 12345 -- sleep 10  # 只关注指定进程
perf sched latency | head -20           # 默认排序下的整体情况

报告列读法

列含义判读要点
等待最大值该任务最长一次等待长尾任务往往是问题来源
等待平均值整体排队水平与负载强度共同解读
切换次数窗口内上下文切换次数过高说明抢占频繁
唤醒时间被唤醒到运行的时间与请求延迟直接相关
汇总表只用来看优先级,定位还要靠时间线与逐次明细:某个任务等待长,可能是它自己频繁让出处理器,也可能是被高优先级任务持续抢占。
记录窗口必须覆盖现象发生的时段,并且在相同负载模式下采集;在平稳期采集到的调度数据再详细也解释不了高峰时的问题。

易错点

  • 全系统长时间记录前未评估体积与开销,采集本身影响了被测业务。
  • 在负载模式不匹配的时段采集,得到平稳数据却用来解释高峰现象。
  • 只看等待时间最长的一项,忽略任务的让出行为,把人家的正常等待当成故障。
  • 不与调度器配置和绑核策略对照,得不出可执行的处置结论。
  • 把调度延迟与运行队列延迟两个口径混用,数值无法互相印证。

数据来源与参考

  • man perf-sched
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌