Preemption test will test several attributes of the linux RT scheduler. It checks to make sure that the scheduler allows higher priority tasks to preempt lower ones, and it measures the latency it takes to do so.
The basic premise of this test is to synchronously launch a series of threads which have a monotonically increasing RT priority by a parent that is running at the highest priority. So for 5 threads, we have 5 worker threads at priorities 1-5, and a parent at 6. The sequence would basically go: 6-1-6-2-6-3-6-4-6-5. We calibrate a busy-loop so that each child gets (by default) 20ms worth of busy work to do. We then measure the latency to wake the child, wake the parent, and run the entire test.
The expected result is that we should see short wake-latencies across the board, and the higher priority threads should finish their work first.
You can get code of preemption test from:
Note: You will need to have a development version of boost available to compile.
Here, installation under a Debian-based Distro (Lenny) is described:
- Download the source
- Unpack the Archive
#> tar xvjf preempt-test-latest.tar.bz2
- Install required libs
#> sudo apt-get install libboost-thread-dev libboost-program-options-dev
- Run make
#> make g++ preempt-test.cc -g -lboost_thread-mt -lboost_program_options -o preempt-test /usr/bin/ld: cannot find -lboost_thread-mt collect2: ld returned 1 exit status make: *** [preempt-test] Error 1
- Fix missing link
#> sudo ln -s /usr/lib/libboost_thread-gcc-mt-1_33_1.so /usr/lib/libboost_thread-mt.so
- Run make again
This test was inspired by Steven Rostedt's "rt-migration-test", so many thanks to him for getting this effort off the ground.