一、简介:为什么必须“测过”才能量产?
背景:瑞芯微 RK3568/RK3588 凭借四核 A55+A76、PCIe 3.0、ISP 2.0,已成为国产边缘视觉盒子、PLC 控制器首选 SOC。
痛点:官方 SDK 默认 Android/Linux 内核非实时,打 PREEMPT_RT 补丁后,延迟、抖动、CPU 负载、IO 吞吐到底好不好?没有数据,甲方不敢签字。
价值:本文给出标准化测试流程 + 脚本模板 + 结果判据,30 分钟生成 PDF 报告,直接用于 SIL/PL 认证审厂,缩短客户导入周期 20 天。
二、核心概念:5 个指标看懂实时性能
| 指标 | 定义 | 合格线(工业 SIL2) | 工具 |
|---|---|---|---|
| 最大延迟 (Max Latency) | 中断到任务唤醒最长时间 | ≤ 100 μs | cyclictest |
| 调度延迟 (Sched Latency) | 任务就绪→获得 CPU 时间 | ≤ 50 μs | perf sched |
| CPU 负载 | 满负荷下 idle < 5% | 稳定无掉核 | top / mpstat |
| IO 吞吐 | SATA/SSD 连续写 | ≥ 400 MB/s | fio |
| 网络抖动 | 1 Gbps 满负载 64 Byte 帧 | ≤ 10 μs | netperf |
三、环境准备:10 分钟搭好“瑞芯微性能实验室”
1. 硬件
RK3568 核心板(4×A55@1.8 GHz)或 RK3588 开发板(4×A76+4×A55@2.4 GHz)
散热片+风扇(持续压测 CPU 80 ℃ 以上)
SSD(M.2 SATA/NVMe)+ 千兆网线 + 串口线(115200)
2. 软件
| 组件 | 版本 | 获取方式 |
|---|---|---|
| 实时内核 | linux-5.10.y-rt52 | 瑞芯微 github 分支 |
| Buildroot | 2022.02.x | 官方 bsp |
| 测试套件 | rt-tests 2.4、fio 3.28、netperf 2.7.0 | 下文一键编译 |
| 报告模板 | LibreOffice Writer | 导出 PDF |
3. 一键编译 rt-tests(可复制)
#!/bin/bash # build_rt_tests.sh git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git cd rt-tests make -j$(nproc) make install DESTDIR=$PWD/out tar -czf rt-tests.tar.gz -C out .把rt-tests.tar.gz拷贝到板子/opt/并解压即可。
四、应用场景:边缘视觉质检盒案例(300 字)
某食品厂部署 RK3568 边缘盒子,运行 YOLOv5 + PREEMPT_RT 内核,对传送带罐头进行实时缺陷检测。
需求:检测周期 ≤ 25 ms(相机 40 fps),机械臂剔除延迟 ≤ 50 ms,全年停机 ≤ 8 h → 需 SIL 2 证书。
挑战:AI 推理 15 ms,图像 DMA 5 ms,留给调度抖动 < 5 ms;若 Max Latency > 100 μs,累积到 25 帧周期即丢包。
测试价值:用本文脚本每日自动跑 cyclictest + fio,生成 PDF 插入 MES 系统,向客户证明“实时性可追踪”,一次审厂通过。
五、实际案例与步骤:从“跑分”到“报告”全流程
所有脚本放
/opt/rk-tests/,可直接chmod +x运行。
5.1 实时延迟测试:cyclictest
#!/bin/bash # run_cyclic.sh CPU_LIST="0-3" # 四核全压 DURATION=300s # 5 分钟 PRIORITY=95 echo "Starting cyclictest on RK3568..." taskset -c $CPU_LIST cyclictest -p$PRIORITY -m -Sp90 -i200 -d$DURATION -q > cyclic.log awk '/Max/ {print "Max Latency = "$3 " us"}' cyclic.log结果判据:
Max ≤ 100 μs 且 StdDev ≤ 10 μs → PASS。
5.2 调度性能:perf sched
#!/bin/bash # run_sched.sh echo "Recording 10 s sched events..." perf sched record -C 0-3 sleep 10 perf sched latency | tee sched.log # 提取最大调度延迟 awk '/sched_max/ {print $3}' sched.log判据:sched_max ≤ 50 μs → PASS。
5.3 CPU 满载测试:stress-ng + mpstat
#!/bin/bash # run_cpu.sh stress-ng --cpu 4 --timeout 60s & mpstat -P ALL 1 60 > cpu.log # 检查 idle 均值 awk '/Average/ && $12 ~ /[0-9]/ {idle+=$12} END {print "Avg idle = " idle/4 "%"}' cpu.log判据:Avg idle < 5% 且无明显掉核 → PASS。
5.4 IO 吞吐:fio(SATA SSD)
#!/bin/bash # run_fio.sh fio --name=write --ioengine=libaio --rw=write --bs=1M \ --size=4G --numjobs=4 --runtime=60 --time_based \ --direct=1 --group_reporting > fio.log awk '/WRITE/ && /BW=/ {print $5}' fio.log判据:连续写 ≥ 400 MB/s → PASS。
5.5 网络抖动:netperf
#!/bin/bash # run_net.sh # PC 端作 server:netserver -p 12865 netperf -H <PC_IP> -t UDP_RR -l 60 -p 12865 -- -r 64 | tee net.log awk '/Latency/ {print $4}' net.log # 单位 us判据:平均抖动 ≤ 10 μs → PASS。
5.6 一键综合脚本:生成 CSV+PDF
#!/bin/bash # run_all.sh ./run_cyclic.sh ./run_sched.sh ./run_cpu.sh ./run_fio.sh ./run_net.sh # 汇总到 csv echo "Test,Result,Unit" > result.csv echo "Max Latency,$(awk '/Max/ {print $3}' cyclic.log),us" >> result.csv echo "Sched Max,$(awk '/sched_max/ {print $3}' sched.log),us" >> result.csv echo "IO BW,$(awk '/WRITE/ && /BW=/ {print $5}' fio.log),MB/s" >> result.csv # 使用 LibreOffice 模板导出 PDF libreoffice --convert-to pdf --headless template.odtPDF 含公司 Logo、日期、签名栏,直接附在出货报告中。
六、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
| cyclictest Max > 200 μs | 未关超线程 / 电源管理 | BIOS 关闭 Turbo、C-State;内核加nohz_full=1-3 |
| fio 带宽低 | 仅 150 MB/s | 确认 SATA 模式为 AHCI,换 NVMe SSD |
| netperf 报“connect failed” | 防火墙未放行 | iptables -F或放行 12865/udp |
| 测试过程温升高 | 核心 90 ℃ 降频 | 加风扇,使用thermal_zone0/temp监控 |
| 结果波动大 | 每次差 30% | 固定 CPU 频率:echo performance > scaling_governor |
七、实践建议与最佳实践
每日自动化
把run_all.sh加入 crontab(凌晨 2 点),结果 push 到 GitLab Pages,客户扫码即可看。温升与实时联合监控
同时记录thermal_zone0/temp,建立“温度-延迟”散点图,提前发现散热瓶颈。版本锁定
测试报告首页注明:内核哈希、Buildroot 配置、工具链版本,确保复现。故障注入复核
每月人工插入一次echo c > /proc/sysrq-trigger看看 watchdog 能否在 100 ms 内重启。可视化面板
使用 Grafana + InfluxDB,把 cyclictest 每 1 s 的延迟时序入库,设置 Max>80 μs 告警。分客户模板
视觉质检、PLC、网关三类场景,分别保存template_vision.odt、template_plc.odt,导出时 1 键切换。
八、总结:一张脑图带走全部要点
瑞芯微实时性能测试 ├─ 环境:RK3568/RK3588 + 5.10-rt + Buildroot ├─ 工具:cyclictest + perf + fio + netperf ├─ 指标:Max Latency≤100 μs, IO≥400 MB/s, Jitter≤10 μs ├─ 脚本:一键 run_all.sh → CSV → PDF └─ 落地:每日自动化 + Grafana 大屏 + 客户审厂测过,才敢卖;有报告,才有钱。
把本文脚本 clone 到你的 RK 板子,今晚就跑第一次全项测试,明天把 PDF 甩给客户——国产芯 + 实时 Linux,一样可以做到毫秒级、可量产、可认证!祝你测试顺利,性能一路狂飙。