调度延迟分析
调度延迟分析记录内核的调度事件,然后汇总每个任务的等待时间与唤醒延迟:前者是可运行但迟迟拿不到处理器的时间,后者是被唤醒到真正开始运行的时间。它们直接对应「机器不忙但请求慢」这类现象,是排查尾延迟与不规律卡顿的重要方向。
基本信息
| 适用平台 | 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 # 默认排序下的整体情况报告列读法
| 列 | 含义 | 判读要点 |
|---|---|---|
| 等待最大值 | 该任务最长一次等待 | 长尾任务往往是问题来源 |
| 等待平均值 | 整体排队水平 | 与负载强度共同解读 |
| 切换次数 | 窗口内上下文切换次数 | 过高说明抢占频繁 |
| 唤醒时间 | 被唤醒到运行的时间 | 与请求延迟直接相关 |
汇总表只用来看优先级,定位还要靠时间线与逐次明细:某个任务等待长,可能是它自己频繁让出处理器,也可能是被高优先级任务持续抢占。
记录窗口必须覆盖现象发生的时段,并且在相同负载模式下采集;在平稳期采集到的调度数据再详细也解释不了高峰时的问题。