首页/系统/Linux 内核与性能调优速查/cyclictest 实时延迟测量
CPU 与调度60 条

cyclictest 实时延迟测量

cyclictest 以高精度定时器循环唤醒并测量实际延迟,输出 Min/Avg/Max,是评估系统调度抖动的常用量化手段。

工具是什么

cyclictest 属于 rt-tests 套件,用高精度定时器做周期性唤醒,测量「应当醒来的时刻」与「实际被调度执行的时刻」之间的差值,是量化系统调度抖动最常用的手段。它按线程输出 Min/Avg/Max 以及可选的直方图,其中 Max(最坏情况延迟)决定系统能否满足实时性要求——平均值好看而 Max 很差,说明存在偶发尖峰,对实时业务是致命问题。

基本信息

安装包rt-tests(各发行版同名包)
权限要求通常需 root 或具备实时调度权限,否则只能用普通策略
常用参数-m 锁定内存、-p 优先级、-t 线程数、-i 间隔(us)、-d 时长(秒)
输出控制-h 直方图、-q 精简输出、-S 每 CPU 一个线程、-a 绑定 CPU
关键指标Max 与直方图尾部,而不是单独看 Avg
前提测量环境需与生产一致,并在测试时叠加代表性负载

典型使用场景

  • 评估服务器能否承载实时任务(工业控制、交易撮合、音视频采集)
  • 对比内核参数变更(PREEMPT、threadirqs、isolcpus、绑核)对最坏延迟的影响
  • 定位延迟尖峰:叠加磁盘回写、网络流量、THP 合并等负载后复测
  • 内核或 BIOS 升级前后的回归验证,用同一套参数做前后对照
  • 为 SLA 提供数据支撑,例如「在指定负载下 Max 小于某个微秒数」

实测示例

实测示例
sudo cyclictest -m -p 80 -t 4 -i 200 -d 60  # 4 线程、200 微秒周期、跑 60 秒并锁定内存
sudo cyclictest -m -p 99 -t 8 -i 100 -d 300 -h 400 -q  # 长时运行并输出直方图,重点看尾部
sudo cyclictest -m -p 80 -S -i 200 -d 60  # 每个 CPU 一个线程,判断是否为单核抖动
sudo cyclictest -m -p 80 -a 2-3 -t 2 -i 200 -d 60  # 绑定到 CPU2-3,验证绑核是否降低延迟
# 判读要点:Max 明显高于 Avg 说明存在尖峰;短时间测试容易漏掉偶发极值

输出读法

输出项含义判读要点
T线程编号与 -t/-S 的线程规划对应
Min最小延迟受硬件与内核配置的下限影响
Avg平均延迟反映常态,不能单独作为达标依据
Max最大延迟实时性判断的核心,必须结合测试时长看
Act当前值便于观察抖动形态
-h 直方图各延迟区间的命中次数看尾部区间是否有异常聚集
一定要在叠加代表性负载的情况下测量:空载结果几乎必然好看。真实环境里的磁盘回写、网络中断、内存回收与大页合并都会制造尖峰,测完再决定要不要动内核参数。
测试时长越长越可能抓到最坏情况,用十几秒的结果去承诺 SLA 会漏掉偶发尖峰。做对比实验时线程数、周期、优先级、时长与负载都要保持一致,否则数据不可比。

易错点

  • 只报 Max 不写时长、线程数与负载:孤立数字没有任何可比性,也无法复现
  • 以普通用户且无实时权限运行:测到的其实是普通调度策略下的延迟,结论与实时能力无关
  • 空载测量:结果普遍优于真实环境,用来评估生产实时性是常见的误导来源
  • 测量期间同时跑其他压测工具互抢资源:把无关干扰算成本系统的调度抖动
  • 忽略平台层原因:BIOS/固件的 SMI 或虚拟化宿主造成的尖峰无法靠内核参数消除,需要在裸机与固件侧确认

数据来源与参考

  • rt-tests 官方文档(cyclictest)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌