延时仅33us,Linux-RT实时性能测试分享—基于瑞芯微RK3562J国产平台

2024-08-16 14:36:32 浏览数 (1)

本文主要介绍瑞芯微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实时性测试数据图 1 RK3562J实时性测试数据

根据3种状态的测试结果可知,当程序指定至隔离的CPU3核心上运行时,Linux系统延迟最低,可有效提高系统实时性。故推荐对实时性要求较高的程序(功能)指定至隔离的CPU核心运行。

RK3562J典型应用领域

图 2图 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图 3

评估板重启后,执行如下命令,查看环境变量。

Target#cat /proc/cmdline

图 4图 4

进入评估板文件系统,执行如下命令,修改内核printk日志等级,避免内核打印信息影响实时测试。

Target#echo 1 > /proc/sys/kernel/printk

调整内存分配策略为“2”,禁用内存过度使用。避免出现OOM(Out-of-Memory) Killer攻击某些进程而产生延迟,影响测试结果。

Target#echo 2 > /proc/sys/vm/overcommit_memory

图5图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图 6

对测试结果文件的数据进行分析,使用脚本生成直方图,得到隔离CPU核心状态下的统计结果如下所示。本次测试中,CPU1核心Max Latencies值最大,为244us,隔离CPU3核心的Max Latencies值最小,为33us。

图7图7
表 1表 1

0 人点赞