RT-Thread
在工业领域、高安全高可靠性领域,实时操作系统在其中发挥着重要的作用,从毫秒级,微秒级实时响应,决定着装置系统能满足何种严苛的要求。
RT-Thread Smart操作系统是一套基于RT-Thread内核,并具备POSIX用户态运行环境的高性能实时操作系统。它类似Linux、Windows的架构,具备用户态和内核态(并相分离),用户态具备全地址空间(进程模型),启用了A核芯片中的MMU,多级页表,实现了在A核SoC大芯片上的实时控制系统。
RT-Thread Smart在具备POSIX用户态运行环境后,其实时性如何,和一般的RTOS相比,和通用的带实时补丁Linux操作系统相比,它的实时性能力到底如何。希望通过本文的测试给到大家一个对比认识。
测试平台
所有测试基于相同的一块瑞芯微 RK3566开发板,RK3566携带四核 64 位高性能 ARM Cortex-A55 处理器,主频 1.8GHz,4GB LPDDR4X 内存。
RT-Thread 内核基于开源主线仓库 master 分支,平台 SDK 基于 RT-Thread Smart 专业版本,使用 gcc 工具链,优化等级 O2。
Linux-RT 内核版本基于 linux-orangepi 仓库 orange-pi-5.10-rk35xx-rt 分支,5.10内核版本并已经开启了实时补丁选项。
Zephyr内核版本基于开源主线仓库master分支,commit:7a492d308828b928074816c49d38de18b4dcfbb4, 编译优化等级通过 Kconfig 配置为 O2。
RTOS 实时性能测试工具
首先是传统的实时操作系统测试对比,对比的另一实时操作系统选择的是Zephyr实时操作系统,都运行在4核SMP模式下进行测试。本次测试工具选择相同的测试用例代码,用于衡量不同的压力负载下的 RTOS 综合实时性能指标。
指标由以下三个部分构成:中断响应时延 + 异步通知时延 + 实时任务调度时延。这三个部分加起来的时间越短越好,同时多次测量的值分布越集中越好。
测试用例实现方式是在一个实时任务上通过高精度定时器设定一个时延,并挂起该任务。在中断到来时,通过同步原语通知实时任务异步事件到来,并唤醒。然后计算这段时间相对于期望时延的差值,得到这期间的时延数据。通过多次采样,施加不同的压力负载,获得 RTOS 在不同情况下的实时性能指标情况。压力负载则模拟 cpu、中断响应、访存操作。
RTOS 实时性测试结果对比
点击放大??查看更清晰
测试分成了4种情况:
● 无压力负载时测试数据,类似于其他都不运行,而是空跑;
● CPU计算负荷下的测试数据,使用 Dhrystone 测试 CPU 负载,它是一种典型的整数运算基准程序,用于模拟高强度的计算场景,以评估系统在繁忙时的实时响应能力。
● IO/中断负荷下的测试数据,通过 IPI(Inter-Processor Interrupts)生成大量中断请求,测试系统在执行 IO 操作处理高频中断场景下的实时性能。
● 内存负荷下的测试数据,使用 MBW 测试工具进行内存带宽压力测试,模拟大规模数据传输的场景,考察系统在内存资源紧张时的实时响应情况。
通过上述结果可以发现:RT-Thread Smart基本指标在2.4us的延迟,当IO/中断,CPU计算负荷,内存负荷上去时,最大延迟会上升到8us附近。而Zephyr实时操作系统在一些极限点上延迟会到15us,甚至略显夸张的525us(还好不是1ms?)。
cyclictest测试
cyclictest是Linux上非常流行、常见的实时性测试工具,它通过使用高精度定时器来测量两个时间点的延时:
cyclictest 源码来自项目 rt-tests release v1.0,参考官方 wiki :
https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest/start
它编译出来是一份用户态测试程序,这份代码在Linux,RT-Thread Smart上都不需要进行修改,直接通过gcc交叉工具链采用O2优化选项进行编译即可。
Linux 测试使用命令:cyclictest -p 95 -d 0 -i 1000 -D 10m -m -n --histogram=100
rt-smart 测试使用命令:cyclictest -d 0 -i 1000 -D 10m -m -n --histogram=20(Linux 优先级规则与 rt-thread 不同,保证 cyclictest 是系统中最高优先级任务即可)
cpu 负载:在后台启动 dhrystone 任务。通过 top 命令观察,每个核启动一个时 cpu 占用率峰值可以达到 99.7% 以上。
内存负载:执行 cyclictest 测试的同时,运行 mbw 任务模拟高内存负载环境。
IO 负载:执行 cyclictest 测试的同时,运行 iperf 服务,并连接客户端测试,以此模拟高网络(IO)负载环境。
cyclic 测试指标对比
点击放大??查看更清晰
上述是两份对比图,前面的是cyclictest的min/avg/max对比图。可以看到RT-Thread Smart的实时性表现都比较好,max值在11/12us左右,在内存负载的情况下max值会到30+us。
下面的图则是时延数据的分布情况,可以发现相对于 Linux-RT,rt-smart 下的测试指标在各类负载下的重复实验中基本上都比较集中。因此同为支持到POSIX用户态应用程序的RT-Thread Smart操作系统,相比较带实时补丁的Linux来说,它的实时性优势也是非常明显,相当于提供POSIX应用程序的同时,依然具备非常好的实时性能力。
性能优化是一个持久而漫长的过程,这个其中需要持续的定位整体系统中的性能损耗点,所以在这个过程中我们也在不断迭代、追求极致,并加入更有效的手段、工具来辅助定位及解决问题。下一篇文章,我们将介绍rt-smart上的ftrace及性能可视化等工具,来展现系统的内部系列行为,敬请期待。
转载此文是出于传递更多信息目的。若来源标注错误或侵犯了您的合法权益,请与本站联系,我们将及时更正、删除、谢谢。
https://www.414w.com/read/1115577.html