性能
RME 是一个保护模式微内核,所以第一个问题是:为保护付出的代价有多大?在 微控制器上,答案是它仍然处在裸机 RTOS 的同一量级,同时增加了权能隔离。
以下所有数值都是真机上的平均 CPU 周期,使用最高优化等级(通常是 -O3, 可用时开启 LTO)。基准来自 RME/RVM 测试套件;仓库内的基准源码实现了线程切换 子集,完整表格通过 RVM 集成测得。
微控制器
| 芯片 | 平台 | 主频 | Flash | RAM | 构建 | Yield/S | Yield/2 | Inv/2 | Sig/1 | Sig/2 | Sig/S | Sig/I |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| STM32L071CB | Cortex-M0+ | 32 MHz | 128 KB | 20 KB | Keil | 492 | 763 | 956 | 718 | 810 | 749 | 522 |
| ... | ... | ... | ... | ... | GCC | 513 | 799 | 939 | 736 | 830 | 776 | 534 |
| STM32F405RG | Cortex-M4F | 168 MHz | 1 MB | 192 KB | Keil | 324 | 524 | 692 | 576 | 731 | 568 | 420 |
| ... | ... | ... | ... | ... | GCC | 332 | 520 | 684 | 608 | 735 | 540 | 416 |
| STM32F767IG | Cortex-M7F | 216 MHz | 1 MB | 512 KB | Keil | 264 | 400 | 600 | 438 | 484 | 477 | 282 |
| ... | ... | ... | ... | ... | GCC | 294 | 456 | 644 | 406 | 460 | 429 | 321 |
| CH32V307VC | RV32IMAFC | 144 MHz | 128 KB | 192 KB | GCC | 358 | 669 | 706 | 703 | 723 | 624 | 523 |
| Chip | Yield/S | Inv/2 |
|---|---|---|
| L071 | 513 | 939 |
| F405 | 332 | 684 |
| F767* | 264 | 600 |
| V307 | 358 | 706 |
指标定义
| 指标 | 含义 |
|---|---|
| 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/S | Yield/2 | Inv/2 | Sig/2 |
|---|---|---|---|---|---|---|
| F1C100S | ARM926EJ-S | 1 | TBD | TBD | TBD | TBD |
x86-64 工程目前明确不是可启动发行版。请把 MPU(微处理器)一侧当作研究和 bring-up 工作,而不是性能承诺。
正确解读这些数字
- 这些是平均情况周期。内核为有界最坏情况而设计;只看平均值不能描述一个 实时系统。
- 工具链不同。加粗行是 STM32F767IG + Keil,其它行使用各自注明的编译器; 跨编译器比较时必须说明这一点。
- 单线程测试里的
Yield/S是微基准,不是应用吞吐结果。 - 没有发布任何微处理器实测数字,因为确实还没有。
