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
相关推荐
2501_920047031 小时前
openclaw在ubuntu系统的安装
linux·运维·ubuntu·openclaw
呉師傅2 小时前
UPS滴滴告警!如何测量UPS电池内阻【UPS学习】
运维·服务器·网络·学习·电脑
一个人旅程~2 小时前
linux如何“抢”过windows的usb移动硬盘权限对0磁道损坏的移动硬盘进行尝试修复
linux·windows·经验分享·电脑
YL200404262 小时前
MySQL-运维篇-主从复制
运维·数据库·mysql
tedcloud1233 小时前
wifi-densepose部署教程:构建无线人体感知系统
服务器·javascript·网络·typescript·ocr
AC赳赳老秦3 小时前
OpenClaw碎片时间利用:设置轻量化自动化任务,高效利用职场碎片时间
java·大数据·运维·服务器·数据库·自动化·openclaw
sukioe3 小时前
Linux RPM 方式安装 MySQL 8.0
linux·mysql·adb
worm小虫3 小时前
这场劫难,从一份等保报告开始——一件运维的小事SSH升级
运维
JAVA学习通3 小时前
《大营销平台系统设计实现》 - 营销服务 第8节:抽奖规则树模型结构设计
运维·决策树·docker·容器·责任链模式