Real Time in Embedded Linux System

From IGEP - ISEE Wiki

Revision as of 08:51, 8 November 2011 by Eballetbo (talk | contribs) (Created page with ' == Real-time - Timers and scheduling latency == Based on free training materials from Free Electrons covering real-time (http://free-electrons.com/docs/realtime/) Learn how to…')

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Real-time - Timers and scheduling latency

Based on free training materials from Free Electrons covering real-time (http://free-electrons.com/docs/realtime/)

Learn how to handle real-time processes and practice with the different real-time modes. Measure scheduling latency.

Setup

Using high-resolution timers

Have a look at the rttest.c source file

Now compile this program:

# gcc -o rttest rttest.c -lrt

Execute the program on the board

Testing the non-preemption kernel

Testing the voluntary preemption kernel

Recompile your kernel with CONFIG_PREEMPT_VOLUNTARY enabled and test the program with nothing special

Test the program with nothing special

# ./rttest 
Clock resolution (ns): 1
Measurement, please wait 1 minute...
Samples: 153046
Min latency: 113 us
Max latency: 7712 us
Average latency: 292 us

Test your program and at the same time, add some workload to the board, by running

# stress --cpu 1 --io 2 --vm 2 --vm-bytes 128M --timeout 120s &
# ./rttest 
Clock resolution (ns): 1
Measurement, please wait 1 minute...
Samples: 90233
Min latency: 83 us
Max latency: 28586 us
Average latency: 558 us

Test your program again with the workload, but by running the program in the SCHED_FIFO scheduling class at priority 99

# stress --cpu 1 --io 2 --vm 2 --vm-bytes 128M --timeout 120s &
# chrt -f -r 99 ./rttest
Clock resolution (ns): 1
Measurement, please wait 1 minute...
Samples: 210637
Min latency: 52 us
Max latency: 2219 us
Average latency: 181 us

Testing the preemptible kernel

Recompile your kernel with CONFIG_PREEMPT enabled and test the program with nothing special

# ./rttest
Clock resolution (ns): 1
Measurement, please wait 1 minute...
Samples: 154210
Min latency: 113 us
Max latency: 9085 us
Average latency: 288 us

Test your program and at the same time, add some workload to the board, by running

# stress --cpu 1 --io 2 --vm 2 --vm-bytes 128M --timeout 120s &
# ./rttest 
Clock resolution (ns): 1
Measurement, please wait 1 minute...
Samples: 113158
Min latency: 83 us
Max latency: 15921 us
Average latency: 421 us

Test your program again with the workload, but by running the program in the SCHED_FIFO scheduling class at priority 99

# stress --cpu 1 --io 2 --vm 2 --vm-bytes 128M --timeout 120s &
# chrt -f -r 99 ./rttest
Clock resolution (ns): 1
Measurement, please wait 1 minute...
Samples: 235302
Min latency: 83 us
Max latency: 296 us
Average latency: 150 us

Testing the Xenomai scheduling latency

 $ wget http://download.gna.org/xenomai/stable/xenomai-2.6.0.tar.bz2