EmberRTOS RT
EmberRTOS RT is the real-time variant of EmberRTOS. It is the same immutable, transactionally
updated foundation described in EmberRTOS (Standard), which
covers the OS fundamentals, running a PREEMPT_RT real-time kernel in place of the
general-purpose one. Use it wherever a workload has a hard deadline: motion control, safety
interlocks, high-rate deterministic I/O, and PLC/SCADA or drive timing.
What "real-time" means here
Real-time is not about being fast on average. It is about a bounded worst case. A control loop that is usually quick but occasionally stalls for milliseconds will still miss its deadline and can damage equipment or trip a safety function. EmberRTOS RT targets a worst-case wake-up latency of 100–200 µs under sustained load, and measures the worst case directly rather than reporting a comfortable average.
The real-time kernel
Most distributions either don't ship a real-time kernel at all or gate one behind a paid enterprise
subscription. PREEMPT_RT has been part of the mainline Linux kernel since 6.12, so a real-time
kernel is now simply mainline kernel source compiled with CONFIG_PREEMPT_RT=y and RT-friendly
options, rather than an out-of-tree patchset.
EmberRTOS builds and ships its own real-time kernel. That means the real-time capability is ours to tune and support end-to-end, not a third-party dependency. If a node is provisioned as RT but a verified real-time kernel cannot be resolved, provisioning fails safe and refuses rather than silently booting a general-purpose kernel under a real-time badge.
Measured performance
EmberRTOS RT was booted on commodity 4-core Intel desktop hardware (not server-grade, not
hand-picked), tuned, and measured under sustained load with the industry-standard cyclictest tool.
Over a 300-second run, roughly 1.5 million samples, on the isolated real-time cores while the
housekeeping core was saturated with hackbench plus CPU-burn load:
| Real-time core | Min | Avg | Worst-case |
|---|---|---|---|
| Core 1 | 1 µs | 1 µs | 36 µs |
| Core 2 | 1 µs | 1 µs | 42 µs |
| Core 3 | 1 µs | 1 µs | 31 µs |
Worst-case wake-up latency: 42 µs. Average: ~1 µs. Against the 100–200 µs industrial target,
that is roughly 2.5× inside the tightest end of spec and nearly 5× inside the loosest, on
unremarkable desktop silicon. Kernel 6.12.95 SMP PREEMPT_RT, cyclictest -m -p99 -i200.
A 42 µs worst case leaves better than 4× margin under a 200 µs control-loop budget, and still clears a 100 µs budget with room to spare.
Qualification note. The figures above come from a 5-minute characterization run. Production sign-off for a given hardware platform should include a 24–72 hour soak under representative application load to catch rare tail events. The measured result is well inside target, so this is a qualification formality rather than an open question about whether the target is met.
Tuning
The real-time result depends on tuning as much as on the kernel. EmberRTOS RT applies the standard
PREEMPT_RT tuning set:
- Deep C-states disabled (
processor.max_cstate=1,intel_idle.max_cstate=0): deep idle states add wake-up latency; this is the single biggest determinism win. - CPU isolation: housekeeping is kept on CPU0; the remaining cores are reserved for real-time work. IRQs and general load are pinned to the housekeeping core so the real-time cores stay clean.
- IRQ affinity: device interrupts are steered off the real-time cores.
- Watchdogs off, tick skew on: removes periodic jitter sources.
performanceCPU governor and unbounded RT runtime: no frequency scaling or RT throttling on the hot path.
For a known deployment with a fixed core count, boot-time CPU isolation
(isolcpus/nohz_full/rcu_nocbs across the upper cores) recovers the last few microseconds.
Enabling RT on a node
The real-time variant is selected at provisioning time. During first-boot configuration, an RT flag on the configuration medium causes EmberRTOS to install the real-time kernel, apply the tuning above, and set the real-time kernel as the default boot kernel, inside the transactional snapshot, so it is atomic and reversible like any other change. A reboot activates it.
After boot, confirm the real-time kernel is active:
uname -v # look for PREEMPT_RT
cat /etc/emberrtos/kernel-flavor # -> rt
Validating on your hardware
Latency depends on the specific machine, so EmberRTOS RT ships a self-contained live validation
image, the real-time kernel plus a cyclictest-based jitter tool, that boots entirely in RAM
(nothing is written to disk) and reachable over SSH. Boot it on a candidate machine and run:
jitter 300 # 5-minute worst-case latency test under load
The reported Max is that machine's worst-case wake-up latency. This is how you qualify a hardware platform before deploying EmberRTOS RT on it, and how the 42 µs figure above was produced.
When to use EmberRTOS RT
Deploy EmberRTOS RT when the node must respond within a bounded worst-case time:
- Motion control and servo/drive loops
- Safety interlocks and protective functions
- High-rate deterministic data acquisition
- PLC/PAC runtimes (e.g. CODESYS) with cycle-time guarantees
For everything else, whether that's gateways, telemetry, container hosts, or general edge compute, use EmberRTOS (Standard), which avoids the tuning constraints (isolated cores, disabled idle states) that real-time determinism requires.
References
- The full methodology, comparison data, and appendices are in the EmberRTOS Real-Time Linux White
Paper (build metrics, package audit, tuning specifics, and complete
cyclictestresults). PREEMPT_RT/ CPU isolation (kernel.org)