0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全国产!瑞芯微 RK3576 ARM 八核 2.2GHz 工业开发板—Linux-RT应用开发案例

Tronlong创龙科技 来源:Tronlong创龙科技 作者:Tronlong创龙科技 2025-06-23 10:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

本文主要通过Cyclictest延迟检测工具,以及基于Linux-RT的应用程序评估Linux-RT系统的实时性,适用开发环境如下:

Windows开发环境:Windows 7 64bit、Windows 10 64bit

Linux开发环境:VMware16.2.5、Ubuntu22.04.5 64bit

U-Boot:U-Boot-2017.09

Kernel:Linux-6.1.115、Linux-RT-6.1.115

LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v1.1.0)

Linux-RT性能测试结果如下表所示。

表 1

wKgZPGhYu4GAWC0gABzEphOZNW0348.png

我司默认使用的是Linux内核,同时提供了Linux-RT内核位于产品资料“4-软件资料LinuxKernelimagelinux-6.1.115-[版本号]-[Git系列号]”目录下。请按照如下方法替换为Linux-RT内核。

将Linux-RT内核镜像boot-rt.img拷贝至评估板文件系统任意目录下。执行如下命令,替换内核镜像至Linux系统启动卡,评估板重启生效。

备注:mmcblk1p3为Linux系统启动卡对应的设备节点,如需固化至eMMC,请将设备节点修改为mmcblk0p3。

Target# dd if=boot-rt.img of=/dev/mmcblk1p3

Target# sync

Target# reboot

wKgZPGhYu42AWlLrAAAYZNXt6JA459.png图 1

wKgZO2hYu5qAFHLEAAArwFJtspw277.png图 2 Linux-RT内核

我司提供的Linux-RT内核与Linux内核测试方法一致,请参考《评估板测试手册》进行测试即可,Linux-RT内核支持的外设接口如下表所示。

表 2

wKgZO2hYu8KAKaWsAAAXdhmPPIA129.png

我司提供的Linux-RT内核应用了开源的RT PREEMPT机制进行补丁。PREEMPT_RT补丁的关键是最小化不可抢占的内核代码量,同时最小化必须更改的代码量,以便提供这种附加的可抢占性。Linux-RT内核增加PREEMPT_RT补丁后,增加了系统响应的确定性和实时性,但是代价是CPU性能降低。

Linux-RT内核与普通Linux内核相比,几个主要的相同之处是:

具有相同的开发生态系统,包括相同工具链、文件系统和安装方法,以及相同的POSIX API等。

仍然存在内核空间和用户空间的划分。

Linux应用程序在用户空间中运行。

Linux-RT内核与普通Linux内核在常规编程方式上的几个主要不同之处是:

调度策略。

优先级和内存控制。

基于Linux-RT内核的应用程序使用了调度策略后,系统将根据调度策略对其进行调优。

Linux系统实时性测试

本章节主要介绍使用Cyclictest延迟检测工具测试Linux系统实时性的方法。Cyclictest是rt-tests测试套件下的一个测试工具,也是rt-tests下使用最广泛的测试工具,一般主要用来测试内核的延迟,从而判断内核的实时性。

Cyclictest常用于实时系统的基准测试,是评估实时系统相对性能的最常用工具之一。Cyclictest反复测量并精确统计线程的实际唤醒时间,以提供有关系统的延迟信息。它可测量由硬件、固件和操作系统引起的实时系统的延迟。

为了测量延迟,Cyclictest运行一个非实时主线程(调度类SCHED_OTHER),该线程以定义的实时优先级(调度类SCHED_FIFO)启动定义数量的测量线程。测量线程周期性地被一个到期的计时器(循环报警)所定义的间隔唤醒,随后计算有效唤醒时间,并通过共享内存将其传递给主线程。主线程统计延迟值并打印最小、最大和平均延迟时间。

参考链接:https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest/start?s[]=cyclictest。

Linux、Linux-RT实时性对比

本次测试结合Iperf和Cyclictest工具,对比测试基于Linux-RT-6.1.115内核和Linux-6.1.115内核的系统实时性能。此处使用Iperf工具不断触发系统中断,提高中断处理负载,以便更好测试系统实时特性。

在Ubuntu执行如下命令查看IP地址,并以服务器模式启动Iperf测试。

Host# ifconfig

Host# iperf3 -s

wKgZO2hYvHeAByKQAAE-mg4wh3k306.png图 3

分别使用Linux-RT-6.1.115内核和Linux-6.1.115内核启动评估板,执行如下命令以客户端模式启动Iperf,并连接至服务器端(Ubuntu系统)。"192.168.13.66"为Ubuntu的IP地址,"-t3600"设置测试时间为3600秒,"&"表示让程序在后台运行。

Target# iperf3 -c 192.168.13.66 -d -t3600 > /dev/null 2>&1 &

wKgZO2hYvKaACFMKAAAPKbTtlds393.png图 4

评估板文件系统默认已提供Cyclictest工具,进入评估板文件系统,执行如下命令使用Cyclictest工具测试系统实时性。

Target# cyclictest -t5 -p98 -m -D10m

wKgZO2hYvLeAWm5jAAAuU8GZmYE659.png图 5 Linux-RT-6.1.115内核测试结果

wKgZO2hYvL-AUKDuAAAuDcof_pI690.png图 6 Linux-6.1.115内核测试结果

表 3Cyclictest测试结果解析

wKgZPGhYvMmAJ3kmAAmfv3-HZ6E018.png

对比测试数据,可看到基于Linux-RT-6.1.115内核的系统的延迟更加稳定,平均延迟、最大延迟更低,系统实时性更佳。

Cyclictest命令参数解析可执行"cyclictest --help"查看,如下图所示。

wKgZPGhYvNWAOFtoAADmlYEwdAg452.png图 7

wKgZPGhYvOeAVYa7AABjhbRDDdo682.png图 8

Linux-RT性能测试

本次测试分别在CPU空载、满负荷(运行stress压力测试工具)、隔离CPU核心的情况下,对比评估Linux-RT内核的系统实时性。

CPU空载状态

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

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

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

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

wKgZO2hYvRSAdhayAAAOatwE2ZI363.png图 9

执行如下命令,基于CPU空载状况下测试系统的实时性。测试指令需运行12小时,请保持评估板长时间稳定工作,测试完成后将生成统计结果no_load_output文件。

Target# cyclictest -m -Sp99 -i1000 -h800 -D12h -q>no_load_output

wKgZPGhYvRyAGJdyAAATCJ7uIuw468.png图 10

参数解析:

-m:锁定当前和将来的内存分配;

-S:采用标准SMP测试;

-p:设置线程优先级;

-i:设置线程的基本间隔;

-h:运行后将延迟直方图转储至标准输出,亦可指定要跟踪的最大延时时间(以微秒为单位);

-D:指定测试运行时长,附加m(分钟)、h(小时)、d(天)指定;

-q:运行时不打印相关信息;

CPU满负荷状态

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

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

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

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

wKgZPGhYvTWARCsgAAAOWXJHQB0731.png图 11

执行如下命令,运行stress压力测试工具,使得CPU处于满负荷状态。再使用Cyclictest工具测试CPU满负荷状态下的系统实时性能。测试指令需运行12小时,请保持评估板长时间稳定工作,测试完成后将生成统计结果overload_output文件。

Target# stress --cpu 8--io 8--vm 8--vm-bytes 64M --timeout 43200s &

Target# cyclictest -m -Sp99 -i1000 -h800 -D12h -q > overload_output

wKgZO2hYvTyAUdROAAAoL-BswJE395.png图 12

参数解析:

--cpu:指定压力测试的进程个数;

--io:指定I/O测试的进程个数;

--vm:指定内存测试的进程个数;

--vm-bytes:指定每个内存测试进程中分配内存的大小;

--timeout:指定测试时长;

隔离CPU核心状态

本次测试以隔离CPU3核心为例,通过降低系统上所运行的其他进程对隔离CPU3产生的延迟影响,确保CPU3进程的正常运行,进而评估Linux-RT内核的系统实时性。

评估板上电启动后,在U-Boot倒计时结束之前长按"Ctrl + C"键进入U-Boot命令行模式,执行如下命令,修改环境变量,隔离CPU3核心。

备注:如从eMMC启动,请将命令中的"sd"修改为"emmc"。

U-Boot# setenvbootargs"storagemedia=sdandroidboot.storagemedia=sdandroidboot.mode=normalisolcpus=3"

U-Boot# saveenv

U-Boot# reset

wKgZPGhYvVSAHA0tAABv3hMuokM664.png图 13

进入评估板文件系统,执行如下命令,查看环境变量是否设置成功。

Target# cat /proc/cmdline

wKgZPGhYvWaATBtHAAArv1OtSuE974.png图 14

执行如下命令,修改内核printk日志等级,避免内核打印信息影响实时测试。

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

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

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

wKgZO2hYvXKAduGfAAAN3nTv6h4969.png图 15

执行如下命令,运行stress压力测试工具,使得CPU处于满负荷状态。再使用taskset工具将cyclictest测试程序运行在CPU3核心,测试CPU3核心满负荷状态下的系统实时性能。测试指令需运行12小时,请保持评估板长时间稳定工作,测试完成后将生成统计结果iso_overload_output文件。

Target# stress --cpu 8--io 8--vm 8--vm-bytes 64M--timeout 43200s &

Target# taskset -c 0-7cyclictest -m -Sp99 -i1000 -h800 -D12h -q > iso_overload_output

wKgZPGhYvX2AIKucAAArxk2WRiI378.png图 16

统计结果分析

我司已提供脚本文件get_histogram.sh用于绘制统计结果直方图,位于产品资料“4-软件资料Demolinux-rt-demosCyclictestbin”目录下,请将该脚本文件拷贝至Ubuntu工作目录下。

执行如下命令,赋予get_histogram.sh脚本可执行权限。

Host# chmod a+x get_histogram.sh

wKgZPGhYvY6AcO5GAABlCCidzyk114.png图 17

在Ubuntu系统执行如下命令,安装gnuplot工具。

Host# sudo apt-get install gnuplot -y

wKgZPGhYvZeAGIWuAAGxMdKJFP4301.png图 18

CPU空载状态

请将CPU空载状态下的统计结果no_load_output文件拷贝至Windows工作目录,使用Windows文本工具打开该文件并拖动至文件末尾,可查看Linux系统每个核心(CPU0~CPU7)的最小延迟(MinLatencies)、平均延迟(AvgLatencies)、最大延迟(MaxLatencies)统计结果。

wKgZPGhYvaWAECBWAABmdz60g3o421.png图 19

请将CPU空载状态下的统计结果no_load_output文件拷贝至Ubuntu,存放在get_histogram.sh同一目录下。

执行如下命令,拷贝并修改CPU空载状态下的统计结果文件名为output,并生成直方图文件plot.png,请将其拷贝至Windows下打开。

备注:满负荷状态统计结果文件overload_output与隔离CPU核心状态统计结果文件iso_overload_output亦需将文件名修改为output方可生成直方图文件plot.png。

Host# cp no_load_output output

Host# ./get_histogram.sh

wKgZPGhYvcSAfeKbAAD0HF5dD6A331.png图 20

wKgZPGhYvdaALi-4ABJyl9iG1cY416.png图 21

根据统计结果no_load_output文件数据以及结合直方图,可得主要数据如下表。本次测试中,CPU7核心Max Latencies值最大,为83us,CPU2核心的Max Latencies值最小,为29us。

备注:CPU0~CPU3为Cortex-A53核心,CPU4~CPU7为Cortex-A72核心。由于CPU4~CPU7核心的重调度中断数量远大于CPU0~CPU3核心,因此CPU0~CPU3的测试结果会比CPU4~CPU7实时性更好。测试数据与实际测试环境有关,仅供参考。

表 4

wKgZO2hYvemAI4--AASb_m2yHt8855.png

CPU满负荷状态

参考如上方法,分析CPU满负荷状态下的统计结果如下所示。本次测试中,CPU4核心Max Latencies值最大,为137us,CPU7核心的Max Latencies值最小,为29us。

wKgZPGhYvfeAAuIBABKJC_sCQ5g042.png图 22

表 5

wKgZO2hYvgOASUWIAARLIWlv7ao142.png

隔离CPU核心状态

参考如上方法,分析隔离CPU核心状态下的统计结果如下所示。本次测试中,CPU4核心核心Max Latencies值最大,为124us,隔离CPU3核心的Max Latencies值相比CPU空载状态、CPU满负荷状态时CPU3核心的Max Latencies值最小,为9us。

wKgZPGhYvhCAI1ytABIjg97HQAk657.png图 23

表 6

wKgZO2hYviKAROJ4AARzgqkUC2A655.png

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

由于篇幅过长等原因,部分内容均不逐一展示,如需获取完整版详细资料,请关注创龙科技微信公众号或官网,或者评论区留言,感谢您的支持!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11814

    浏览量

    219527
  • 开发板
    +关注

    关注

    26

    文章

    6413

    浏览量

    120709
  • 瑞芯微
    +关注

    关注

    27

    文章

    849

    浏览量

    54656
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    维护成本直降!RK3576核心/开发板OTA升级功能详解,触觉智能RK方案商

    触觉智能旗下RK3576核心/开发板产品方案,已新增支持【OTA升级功能】。下文将为大家
    的头像 发表于 04-21 10:30 136次阅读
    维护成本直降!<b class='flag-5'>RK3576</b>核心<b class='flag-5'>板</b>/<b class='flag-5'>开发板</b>OTA升级功能详解,触觉智能<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK</b>方案商

    RK3576基于Linux平台CUPS架构标准打印机适配实战教程

    RK3576是一款中高端Arm国产处理器,原厂配套LinuxKernel6.1内核。触觉智
    的头像 发表于 01-16 17:45 759次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3576</b>基于<b class='flag-5'>Linux</b>平台CUPS架构标准打印机适配实战教程

    RK3576开发板OpenGL性能大起底,这数据我真的服了

    RK3576芯片作为一款中高端的Arm架构
    的头像 发表于 01-16 17:20 1787次阅读
    <b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>OpenGL性能大起底,这数据我真的服了

    RK3576核心/开发板RT-Linux系统实时性及硬件中断延迟测试

    本文介绍RK3576芯片平台RT-Linux系统实时性及硬件中断延迟测试,基于触觉智能RK3576
    的头像 发表于 09-30 16:52 2179次阅读
    <b class='flag-5'>RK3576</b>核心<b class='flag-5'>板</b>/<b class='flag-5'>开发板</b><b class='flag-5'>RT-Linux</b>系统实时性及硬件中断延迟测试

    如何移植EtherCAT Igh--基于米尔RK3576开发板

    本文将介绍基于米尔电子MYD-LR3576开发板(米尔基于RK3576
    的头像 发表于 09-26 08:04 1w次阅读
    如何移植EtherCAT Igh--基于米尔<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>

    创龙 RK3588 国产2.4GHz 工业开发板Linux-RT应用开发案

    Linux-RT 性能;还提供 rt_gpio_ctrl(实时线程控制 LED 翻转)、rt_input(实时线程监听按键触发 LED)两个开发案例,含测试、编译步骤与关键代码,为评
    的头像 发表于 09-25 17:25 859次阅读
    创龙 <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b> <b class='flag-5'>RK</b>3588 <b class='flag-5'>国产</b>2.4<b class='flag-5'>GHz</b><b class='flag-5'>八</b><b class='flag-5'>核</b> <b class='flag-5'>工业</b><b class='flag-5'>开发板</b>—<b class='flag-5'>Linux-RT</b>应用<b class='flag-5'>开发案</b>例

    【作品合集】米尔RK3576开发板测评

    米尔RK3576开发板测评作品合集 产品介绍: RK3576一款面向AI市场推出的高性
    发表于 09-11 10:19

    RK3576RK3576S有什么区别,性能参数配置与型号差异解析

    、物联网等商用AIoT领域。(RK3576RK3576S芯片框图)触觉智能作为专业的
    的头像 发表于 08-14 23:57 2712次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3576</b>与<b class='flag-5'>RK3576</b>S有什么区别,性能参数配置与型号差异解析

    如何在RK3576开发板端编译OpenCV并搭建应用

    本文将介绍基于米尔电子MYD-LR3576开发板(米尔基于RK3576
    的头像 发表于 08-08 08:04 3668次阅读
    如何在<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>上<b class='flag-5'>板</b>端编译OpenCV并搭建应用

    全国产 RK3576 ARM 2.2GHz 工业开发板Linux应用开发手册

    创龙科技 TL3576-EVM 是一款基于 RK3576J/RK3576高性能处理器设计的
    的头像 发表于 06-25 16:44 1090次阅读
    <b class='flag-5'>全国产</b>!<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b> <b class='flag-5'>RK3576</b> <b class='flag-5'>ARM</b> <b class='flag-5'>八</b><b class='flag-5'>核</b> <b class='flag-5'>2.2GHz</b> <b class='flag-5'>工业</b><b class='flag-5'>开发板</b>—<b class='flag-5'>Linux</b>应用<b class='flag-5'>开发</b>手册

    全国产 RK3576 ARM 2.2GHz 工业开发板Linux开发环境搭建

    创龙科技 TL3576-EVM 是一款基于 RK3576J/RK3576高性能处理器设计的
    的头像 发表于 06-25 10:17 812次阅读
    <b class='flag-5'>全国产</b>!<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b> <b class='flag-5'>RK3576</b> <b class='flag-5'>ARM</b> <b class='flag-5'>八</b><b class='flag-5'>核</b> <b class='flag-5'>2.2GHz</b> <b class='flag-5'>工业</b><b class='flag-5'>开发板</b>—<b class='flag-5'>Linux</b><b class='flag-5'>开发</b>环境搭建

    全国产 RK3576 ARM 2.2GHz 工业开发板Linux系统使用手册

    创龙科技 TL3576-EVM 是一款基于 RK3576J/RK3576高性能处理器设计的
    的头像 发表于 06-24 10:50 1193次阅读
    <b class='flag-5'>全国产</b>!<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b> <b class='flag-5'>RK3576</b> <b class='flag-5'>ARM</b> <b class='flag-5'>八</b><b class='flag-5'>核</b> <b class='flag-5'>2.2GHz</b> <b class='flag-5'>工业</b><b class='flag-5'>开发板</b>—<b class='flag-5'>Linux</b>系统使用手册

    全国产 RK3576 ARM 2.2GHz 工业开发板—LVGL应用开发案

    本文主要基于评估演示LVGL应用开发案例,适用开发环境如下。创龙科技 TL3576-EVM 是一款基于
    的头像 发表于 06-23 15:17 973次阅读
    <b class='flag-5'>全国产</b>!<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b> <b class='flag-5'>RK3576</b> <b class='flag-5'>ARM</b> <b class='flag-5'>八</b><b class='flag-5'>核</b> <b class='flag-5'>2.2GHz</b> <b class='flag-5'>工业</b><b class='flag-5'>开发板</b>—LVGL应用<b class='flag-5'>开发案</b>例

    Onenet云网关方案应用--基于米尔RK3576开发板

    本文将介绍基于米尔电子MYD-LR3576开发板(米尔基于RK3576
    发表于 06-06 16:54

    适配多种系统,米尔RK3576核心解锁多样化应用

    周期,让您的项目快速推进。 米尔基于RK3576核心开发板
    发表于 05-23 16:07