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
相关推荐
Urbano41 分钟前
工装外套全制作流程、工序痛点及自动化设备升级方案
运维·自动化
映翰通朱工1 小时前
工业4G网关无公网IP远程运维实战(内网终端异地访问方案)
运维·服务器·网络·安全·智能路由器
洪晓露1 小时前
将 rke2 集群证书延长至 10 年
运维·服务器·数据库
谢平康1 小时前
解决用 rm 报bash: /usr/bin/rm: Argument list too long错
linux·运维·运维开发
IP老炮不瞎唠2 小时前
Python 价格监控如何实现?思路与实用方法分享
运维·服务器·网络
GIS数据转换器2 小时前
城市排水生命线安全运行监测平台深度解析
java·运维·人工智能·python·安全·数据挖掘·无人机
睡不醒男孩0308232 小时前
CLup 6.x 版本中针对StarRocks 存算一体集群的完整操作手册
java·服务器·网络·clup
Tokai_Teio_12 小时前
第四届黄河流域 misc
运维·服务器
hj2862513 小时前
Linux 网络服务综合笔记(概念 + 命令 + 实操案例)2
linux·运维·网络
what_20183 小时前
Linux 磁盘 (查看、划分、inode)
linux·运维·服务器