Skip to content

性能 ​

RME 是一个保护模式微内核,所以第一个问题是:为保护付出的代价有多大?在 微控制器上,答案是它仍然处在裸机 RTOS 的同一量级,同时增加了权能隔离。

以下所有数值都是真机上的平均 CPU 周期,使用最高优化等级(通常是 -O3, 可用时开启 LTO)。基准来自 RME/RVM 测试套件;仓库内的基准源码实现了线程切换 子集,完整表格通过 RVM 集成测得。

微控制器 ​

芯片平台主频FlashRAM构建Yield/SYield/2Inv/2Sig/1Sig/2Sig/SSig/I
STM32L071CBCortex-M0+32 MHz128 KB20 KBKeil492763956718810749522
...............GCC513799939736830776534
STM32F405RGCortex-M4F168 MHz1 MB192 KBKeil324524692576731568420
...............GCC332520684608735540416
STM32F767IGCortex-M7F216 MHz1 MB512 KBKeil264400600438484477282
...............GCC294456644406460429321
CH32V307VCRV32IMAFC144 MHz128 KB192 KBGCC358669706703723624523
同进程线程切换 Yield/S(周期,越低越好)513L071332F405264F767*358V307跨进程调用对 Inv/2(周期,越低越好)939L071684F405600F767*706V307* F767 = Keil
ChipYield/SInv/2
L071513939
F405332684
F767*264600
V307358706
STM32L071CB / F405RG / F767IG / CH32V307 · 除注明外为 GCC · 最优值高亮

指标定义

指标含义
Yield/S同进程内线程让出给自己
Yield/2跨进程线程让出,单向
Inv/2跨进程调用/返回对
Sig/1同进程信号端点发送/接收延迟
Sig/2跨进程信号端点发送/接收延迟
Sig/S同进程信号端点发送/接收对
Sig/I中断信号端点发送/接收延迟

三个关键数字 ​

264周期——STM32F767IG + Keil 的同进程切换
600周期——同一块板上的跨进程调用对
282周期——同一块板上的中断信号延迟

在同样的硅片上,保护模式内核整体上与裸机 RTOS 持平。由此得到两个系统级数字:

  • 微控制器上实测约 3 µs 中断延迟;
  • RME 通过 RVM 托管 RTOS 时,虚拟化开销最低约 6%。

与 RT-Linux 相比,最快路径可好 40×;即使把用户态库开销算进去,仍然约好 25×。这些比较针对上下文切换和中断响应,而不是任意负载下的吞吐。

微处理器 ​

应用处理器表格为 TBD。项目有 ARMv7-A、RV64 和 x86-64 的移植与工程脚手架, 但目前不发布这些平台的实测数字:

芯片平台核心Yield/SYield/2Inv/2Sig/2
F1C100SARM926EJ-S1TBDTBDTBDTBD

x86-64 工程目前明确不是可启动发行版。请把 MPU(微处理器)一侧当作研究和 bring-up 工作,而不是性能承诺。

正确解读这些数字 ​

  • 这些是平均情况周期。内核为有界最坏情况而设计;只看平均值不能描述一个 实时系统。
  • 工具链不同。加粗行是 STM32F767IG + Keil,其它行使用各自注明的编译器; 跨编译器比较时必须说明这一点。
  • 单线程测试里的 Yield/S 是微基准,不是应用吞吐结果。
  • 没有发布任何微处理器实测数字,因为确实还没有。

本软件是 EDI 的官方作品,属于公有领域。

GitHub·Discord·QQ 群 1038895132·rtospro.com