• GPU
  • December 15, 2025
Share

A Real-Time Embedded ARM and RISC-V Latency Case Study in Linux

Latency is one of the most unforgiving constraints in real-time embedded systems. Unlike throughput or raw computational performance, latency defines whether a system meets its fundamental functional requirements or fails entirely. In real-time Linux deployments on ARM and RISC-V platforms, latency determines whether a robotic actuator responds safely, whether a vehicle infotainment system remains perceptually responsive, or whether an industrial controller can meet deterministic deadlines under load. This case study explores real-world latency behavior in embedded Linux systems running on ARM and RISC-V architectures, focusing on how kernel configuration, scheduling models, interrupt handling, memory management, and graphics pipelines interact to shape worst-case and average response times.

At the heart of real-time embedded latency lies the interaction between hardware determinism and software scheduling. ARM and RISC-V platforms are increasingly chosen for real-time workloads not only because of power efficiency but also because of their predictable microarchitectures. However, predictability at the hardware level does not automatically translate to determinism at the system level. Linux, by default, is optimized for throughput and fairness rather than strict deadlines. Achieving real-time behavior requires careful alignment between kernel configuration, device drivers, user-space workloads, and system topology.

A typical embedded ARM or RISC-V real-time system consists of multiple interacting subsystems. Input events may originate from GPIO interrupts, network packets, or sensor buses such as SPI and I²C. These events propagate through the kernel’s interrupt handling path, wake kernel threads or user-space tasks, trigger computation, and often result in output actions such as PWM updates, display refreshes, or network transmissions. Each step introduces potential latency, and the cumulative delay determines whether the system meets its real-time constraints.

A simplified block diagram of this latency path helps clarify the flow:

D
Hardware Interrupt

Interrupt Controller

Kernel IRQ Handler

Thread Wakeup / RT Task

User-Space Processing

Driver Interaction

Hardware Output

On ARM systems, the Generic Interrupt Controller plays a central role in determining interrupt latency. GICv2, GICv3, and GICv4 each introduce different trade-offs in interrupt routing, priority handling, and virtualization support. RISC-V systems rely on the Platform-Level Interrupt Controller and local interrupt mechanisms, which are simpler in design but place greater responsibility on software for prioritization. In both cases, interrupt affinity and preemption settings significantly influence worst-case latency.

One of the most critical steps in preparing a real-time embedded Linux system is enabling the PREEMPT_RT patch set. This transforms the kernel into a fully preemptible environment where most interrupt handlers run in threaded context, allowing higher-priority tasks to preempt lower-priority ones even during interrupt processing. On both ARM and RISC-V, enabling PREEMPT_RT begins at kernel configuration time. A typical verification step after boot confirms that the kernel is running in full real-time mode:

Bash
uname -a
cat /sys/kernel/realtime

A value of 1 in the realtime sysfs entry indicates that the kernel is operating with real-time preemption enabled. Without this configuration, even the most carefully tuned user-space scheduling policies cannot overcome kernel-level non-preemptible sections that introduce unpredictable delays.

Once the kernel is configured for real-time operation, scheduler behavior becomes the next major determinant of latency. Real-time tasks typically use SCHED_FIFO or SCHED_RR scheduling policies, which bypass the Completely Fair Scheduler and provide deterministic execution based on priority. Assigning real-time priorities to critical tasks is essential, but careless use can easily starve non-critical processes and even destabilize the system. A well-designed embedded system carefully segregates real-time and non-real-time workloads.

A simple example of assigning a real-time priority to a latency-critical task looks like this:

Bash
chrt -f 90 ./control_loop

This command runs the control loop with a high FIFO priority, ensuring that it preempts most other tasks. On multi-core ARM and RISC-V systems, CPU affinity further refines determinism by isolating real-time tasks to specific cores. Kernel boot parameters often reserve one or more cores exclusively for real-time workloads:

Bash
isolcpus=2,3 nohz_full=2,3 rcu_nocbs=2,3

These parameters prevent scheduler tick interrupts, RCU callbacks, and non-critical tasks from executing on the isolated cores, significantly reducing jitter.

Latency case studies frequently reveal that interrupt handling, rather than task scheduling, dominates worst-case response times. On embedded platforms with multiple peripherals, shared interrupt lines and poorly configured drivers can introduce latency spikes that are difficult to diagnose. Tools such as latencytop and cyclictest provide invaluable insight into these behaviors. cyclictest, in particular, is widely regarded as the gold standard for measuring real-time latency on Linux systems:

Bash
cyclictest -p 95 -t 1 -n -i 1000 -l 100000

This command schedules a high-priority thread that wakes at fixed intervals and measures the difference between expected and actual wakeup times. On a well-tuned ARM system with PREEMPT_RT, maximum latencies below 50 microseconds are achievable under moderate load. On RISC-V systems, results vary more widely depending on SoC maturity and driver quality, but sub-100-microsecond worst-case latencies are increasingly common.

Memory management is another often overlooked contributor to latency. Page faults, TLB misses, and cache contention can introduce unpredictable delays in real-time workloads. Embedded systems typically mitigate these issues by locking critical memory into RAM and avoiding dynamic allocation in real-time paths. User-space applications can prevent page faults using memory locking:

Bash
ulimit -l unlimited
mlockall(MCL_CURRENT | MCL_FUTURE);

At the kernel level, disabling transparent huge pages and configuring deterministic memory allocators further reduces latency variability. Many embedded deployments also rely on static linking or early memory allocation to eliminate runtime surprises.

Graphics pipelines introduce unique latency challenges in real-time embedded systems, particularly in human-machine interfaces used in automotive, medical, and industrial environments. ARM and RISC-V platforms increasingly rely on DRM/KMS and Wayland compositors to deliver smooth, low-latency graphics. In such systems, compositor latency directly affects perceived responsiveness. Wayland’s explicit synchronization model aligns naturally with real-time constraints by eliminating unnecessary buffering and aligning rendering deadlines with display refresh cycles.

A simplified graphics latency flow illustrates this advantage:

D
Input Event

Wayland Compositor

Client Rendering

DRM Atomic Commit

Display Scanout

Measuring graphics latency on embedded systems often combines software tracing with external instrumentation. Internally, tools such as perf and ftrace reveal scheduling delays and IRQ latencies:

Bash
echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo 1 > /sys/kernel/debug/tracing/tracing_on

Externally, high-speed cameras capture end-to-end motion-to-photon delays, providing empirical validation of software measurements. Case studies consistently show that Wayland-based stacks reduce worst-case graphics latency by one frame compared to legacy Xorg pipelines, a difference that is highly noticeable in touch-driven interfaces.

Power management introduces another dimension to real-time latency. Dynamic voltage and frequency scaling, while beneficial for energy efficiency, can introduce latency spikes if not carefully controlled. Embedded real-time systems often fix CPU frequencies or use performance governors to ensure predictable execution times:

Bash
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

On ARM big.LITTLE systems, pinning real-time tasks to performance cores avoids frequency transition delays associated with energy-efficient cores. RISC-V platforms, while typically simpler, still require careful tuning of clock and power domains to avoid unpredictable wakeup latencies.

A comparative latency snapshot from a real-world case study helps contextualize these considerations:

PlatformKernelMax LatencyAvg LatencyNotes
ARM Cortex-A53PREEMPT_RT38 µs12 µsIsolated cores
ARM Cortex-A72PREEMPT_RT22 µs8 µsWayland UI
RISC-V RV64GCPREEMPT_RT74 µs25 µsEarly SoC
RISC-V RV64GC (tuned)PREEMPT_RT41 µs14 µsIRQ affinity

These numbers highlight a crucial insight: hardware capability alone does not guarantee low latency. Careful system design, driver quality, and configuration discipline matter just as much as CPU architecture.

One of the most valuable lessons from embedded latency case studies is that real-time performance is not achieved through a single optimization but through alignment across the entire stack. Kernel preemption, scheduler policy, interrupt routing, memory discipline, graphics pipelines, and power management must all reinforce one another. A weakness in any one layer can undermine the entire system’s determinism.

As ARM and RISC-V platforms continue to mature, their suitability for real-time Linux workloads becomes increasingly compelling. ARM benefits from a vast ecosystem of mature SoCs and drivers, while RISC-V offers architectural simplicity and transparency that make worst-case analysis more tractable. In both cases, Linux provides the flexibility needed to balance real-time constraints with the richness of a full operating system.

Ultimately, this real-time embedded latency case study demonstrates that Linux, when properly configured and understood, is capable of meeting stringent deterministic requirements on both ARM and RISC-V architectures. The key lies not in treating latency as an afterthought but in designing systems from the outset with determinism as a first-class goal. When that philosophy guides development, Linux transforms from a general-purpose operating system into a reliable real-time platform capable of driving the next generation of embedded innovation.