本文主要介绍瑞芯微RK3562J的实时性测试,开发环境如下:
U-Boot:U-Boot-2017.09
Kernel:Linux-RT-5.10.198
LinuxSDK:
LinuxSDK-[版本号]
(基于RK3562_LINUX_SDK_RELEASE_V1.1.0_20231220)
RK3562J实时性测试数据
本文使用Cyclictest延迟检测工具测试Linux系统实时性,分别在CPU空载、满负荷(运行stress压力测试工具)、满负载-隔离CPU3核心(运行stress压力测试工具)三种情况下运行指令测试12小时。
图 1 RK3562J实时性测试数据
根据3种状态的测试结果可知,当程序指定至隔离的CPU3核心上运行时,Linux系统延迟最低,可有效提高系统实时性。故推荐对实时性要求较高的程序(功能)指定至隔离的CPU核心运行。
RK3562J典型应用领域
图 2
Cyclictest系统实时性测试
本文通过创龙科技TL3562-EVM工业评估板(基于RK3562J)的硬件平台进行演示。为了简化描述,本文仅摘录部分方案功能描述与测试结果,详细产品资料请扫描文末二维码下载。
本次测试以隔离CPU3核心为例,通过降低系统上所运行的其他进程对隔离CPU3产生的延迟影响,确保CPU3进程的正常运行,进而评估Linux-RT内核的系统实时性。
评估板上电启动后,在U-Boot倒计时结束之前按下空格键进入U-Boot命令行模式,执行如下命令,修改环境变量,隔离CPU3核心。
U-Boot#setenv bootargs storagemedia=sd androidboot.storagemedia=sd androidboot.mode=normal isolcpus=3
U-Boot#saveenv
U-Boot#reset
图 3
评估板重启后,执行如下命令,查看环境变量。
Target#cat /proc/cmdline
图 4
进入评估板文件系统,执行如下命令,修改内核printk日志等级,避免内核打印信息影响实时测试。
Target#echo 1 > /proc/sys/kernel/printk
调整内存分配策略为“2”,禁用内存过度使用。避免出现OOM(Out-of-Memory) Killer攻击某些进程而产生延迟,影响测试结果。
Target#echo 2 > /proc/sys/vm/overcommit_memory
图5
执行如下命令,运行stress压力测试工具,使得CPU处于满负荷状态。再使用taskset工具将Cyclictest测试程序运行在CPU3核心,测试CPU3核心满负荷状态下的系统实时性能。测试指令需运行12小时,请保持评估板长时间稳定工作,测试完成后将生成统计结果iso_overload_output文件。
Target#stress-ng --cpu 4 --cpu-method=all --io 4 --vm 4 --vm-bytes 64M --timeout 43200s &
Target#taskset -c 0-3 cyclictest -m -Sp99 -i1000 -h800 -D12h -q > iso_overload_output
图 6
对测试结果文件的数据进行分析,使用脚本生成直方图,得到隔离CPU核心状态下的统计结果如下所示。本次测试中,CPU1核心Max Latencies值最大,为244us,隔离CPU3核心的Max Latencies值最小,为33us。
图7
表 1