Linux Preempt-RT 实时内核 ** 抖动(Jitter)** 完整测试方法

一、抖动定义

实时抖动 = 最大调度延迟 − 最小调度延迟 单位:μs / ns抖动越小 → 时序越稳、伺服 / 运动控制越顺滑

二、核心测试工具:cyclictest 专属测抖动

1. 最简测抖动命令(最常用)

bash

运行

复制代码
# 绑定隔离核、最高优先级、锁内存、10分钟、输出微秒
sudo cyclictest -p 99 -a 3 -i 1000 -D 10m -m

输出字段:Min 最小延迟 Act 当前 Avg 平均 Max 最大

抖动 Jitter = Max − Min 例:空载 Min=2 Max=42 → 抖动 40μs

2. 纳秒高精度测抖动(更精准)

bash

运行

复制代码
sudo cyclictest -p 99 -a 3 -i 500 -D 10m -m -N

-N 结果单位:纳秒 ns

3. 输出延迟直方图(看抖动分布)

bash

运行

复制代码
# 统计最大200μs内所有延迟分布
sudo cyclictest -p 99 -a 3 -i 1000 -D 5m -m -h 200

跑完直接打印延迟区间数量,直观看出抖动集中区间。

4. 只打印最终汇总(安静模式)

bash

运行

复制代码
sudo cyclictest -p 99 -a 3 -i 1000 -D 15m -m -q

三、分场景测抖动(标准流程)

场景 1:空载抖动(基准值)

关闭所有后台程序、关闭压力

bash

运行

复制代码
killall stress-ng
sudo cyclictest -p 99 -a 3 -i 1000 -D 20m -m

合格标准

  • 平均抖动:<30μs
  • 极限抖动:<50μs

场景 2:满负载压力抖动(实战最关键)

bash

运行

复制代码
# 开整机压力
stress-ng --cpu 8 --io 4 --vm 32 &
# 测高压下实时抖动
sudo cyclictest -p 99 -a 3 -i 1000 -D 20m -m

工控合格标准

  • 满载抖动 <80μs 优秀
  • 满载抖动 <100μs 可用

场景 3:多线程并发抖动(多核实时)

bash

运行

复制代码
# 4线程实时任务同时跑,测并发抖动
sudo cyclictest -p 99 -t 4 -a 3-6 -i 500 -D 15m -m

四、专业抖动分析工具

1. rt-migrate-test 测线程迁移抖动

检测内核线程抢占导致的抖动漂移

bash

运行

复制代码
sudo rt-migrate-test -p 99 -a 3

2. pi_stress 测优先级反转抖动

排查高优先级被低优先级阻塞带来的异常大抖动

bash

运行

复制代码
sudo pi_stress -D 10m

五、降低实时抖动必做优化(立刻见效)

  1. 内核启动参数(最关键)

plaintext

复制代码
isolcpus=3,4 nohz_full=3,4 rcu_nocbs=3,4

隔离实时核心,不让系统进程抢占

  1. 固定 CPU 主频

bash

运行

复制代码
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
  1. 关闭干扰服务

bash

运行

复制代码
sudo systemctl stop irqbalance
sudo sysctl -w kernel.numa_balancing=0
sudo swapoff -a
  1. 网卡 / 磁盘中断绑非实时核避免硬件中断瞬间拉高抖动

六、抖动结果判定表

表格

抖动范围 等级 适用场景
<20μs 极佳 高精度伺服、激光焊接、高速闭环
20~50μs 优秀 通用机器人、AGV、视觉跟随
50~100μs 合格 普通工控、数据采集
>150μs 不合格 不适合硬实时业务

七、一键抖动测试脚本

bash

运行

复制代码
#!/bin/bash
sudo killall stress-ng
echo "===== 开始空载实时抖动测试 ====="
sudo cyclictest -p 99 -a 3 -i 1000 -D 10m -m -q
echo "===== 开始压力实时抖动测试 ====="
stress-ng --cpu 4 --io 2 --vm 16 &
sleep 3
sudo cyclictest -p 99 -a 3 -i 1000 -D 10m -m -q
killall stress-ng
相关推荐
lisanmengmeng18 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮18 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹18 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_18 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_19 小时前
云原生基础之Containerd容器运行时
运维·云原生
分布式存储与RustFS19 小时前
RustFS 自建对象存储实战目录:110 篇按场景分类(持续更新)
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
无忧_wy19 小时前
MoneyPrinterTurbo 自动化视频生成实战指南
运维·人工智能·自动化·音视频
木头左1 天前
【Nginx】内网服务源 IP 白名单实战:动态域名解析放行网段 + 端口接管零改造
运维·nginx·白名单·反向代理
Linux-lucky1 天前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
禁默1 天前
启元 Q1 二次开发实践:Ubuntu 部署与仿真验证,从 PrimeConsole 到 ROS 2 Humble + RViz
linux·运维·ubuntu