Skip to content

Performance ​

RME is a protected-mode microkernel, so the first question is whether it pays for its protection. On microcontrollers, the answer is that it stays in the same range as a bare-metal RTOS while adding capability isolation.

All values below are average CPU cycles on real hardware, with the highest optimisation level (usually -O3, LTO when available). The benchmark is the RME/RVM suite; the in-repo benchmark source implements the thread-switch subset, and the full table is measured through the RVM integration.

Microcontrollers ​

ChipPlatformClockFlashRAMBuildYield/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
Intra-process yield — Yield/S (cycles, lower is better)513L071332F405264F767*358V307Inter-process invocation pair — Inv/2 (cycles, lower is better)939L071684F405600F767*706V307* F767 = Keil
ChipYield/SInv/2
L071513939
F405332684
F767*264600
V307358706
STM32L071CB / F405RG / F767IG / CH32V307 · GCC unless marked · best highlighted

Metric definitions

MetricMeaning
Yield/SIntra-process thread yield to itself
Yield/2Inter-process thread yield, one-way
Inv/2Inter-process invocation call/return pair
Sig/1Intra-process signal endpoint send/receive latency
Sig/2Inter-process signal endpoint send/receive latency
Sig/SIntra-process signal endpoint send/receive pair
Sig/IInterrupt signal endpoint send/receive latency

Three numbers that matter ​

264cycles — intra-process yield on STM32F767IG with Keil
600cycles — inter-process invocation pair on the same board
282cycles — interrupt signal latency on the same board

The protected kernel is generally on par with bare-metal RTOSes on the same silicon. Two system-level numbers follow from that:

  • ~3 µs interrupt latency measured on microcontrollers;
  • as low as 6% virtualization overhead when RME hosts an RTOS through RVM.

When compared with RT-Linux, the fastest paths are up to 40× better; even including user-level library overhead, the result is still about 25× better. Those comparisons are about context-switch and interrupt response, not throughput on arbitrary workloads.

Microprocessors ​

The application-processor table is TBD. The project has ports and project scaffolding for ARMv7-A, RV64 and x86-64, but it does not publish measured numbers for them yet:

ChipPlatformCoresYield/SYield/2Inv/2Sig/2
F1C100SARM926EJ-S1TBDTBDTBDTBD

The x86-64 project is explicitly not a bootable distribution today. Treat the MPU side as research and bring-up work, not a performance claim.

Reading the numbers correctly ​

  • These are average-case cycles. The kernel is designed for bounded worst-case behaviour; average numbers alone do not describe a real-time system.
  • Toolchains differ. The bold row is Keil on the STM32F767IG; the other rows use their listed compiler. Do not compare across compilers without noting that difference.
  • Yield/S for a single-threaded test is a microbenchmark, not an application throughput result.
  • No MPU (microprocessor) number is published as measured, because it is not.

An official work of EDI, released into the public domain.

GitHub·Discord·QQ 群 1038895132·rtospro.com