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
相关推荐
GeW6 小时前
新质生产力路线图Linux、数据库、国产化替代一次讲透
linux
aningx8 小时前
cachyos 从 GRUB 切换到 rEFInd
linux
第404号工位9 小时前
40块钱二手瘦客户端,如何跑满家庭物联网中枢?(拒绝Docker爆盘实录)
linux·架构·node.js
对象存储与RustFS9 小时前
网盘限速逼你开会员?用 RustFS 自己搭一个不限速的“私人网盘
服务器·后端·docker
骑着蜗牛撵大象32711 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
众壹新能源科技11 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
..Dauntless..11 小时前
【Linux】一切皆文件和缓冲区
linux·运维·服务器
裕晟资质规划11 小时前
三类资质变更报告时限差在哪?军工 15 日、集成印制 10 日
大数据·服务器·网络
QMCY_jason11 小时前
x86 ubuntu2204 无gui 安装 openeuler 2203 aarch64版本
linux·运维·服务器
重生之小比特11 小时前
【Linux系统】12 进程程序替换 自定义Shell 命令行解释器
linux·运维·服务器