Skip to main content

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 coreMinAvgWorst-case
Core 11 µs1 µs36 µs
Core 21 µs1 µs42 µs
Core 31 µs1 µs31 µ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.
  • performance CPU 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 cyclictest results).
  • PREEMPT_RT / CPU isolation (kernel.org)