Time-Predictable Out-of-Order Execution for Hard Real-Time Systems

This web page provides raw data and experimental software to accompany the article published in IEEE Transactions on Computers, volume 59, number 9, pages 1210-1223, DOI 10.1109/TC.2010.109.

The following code is provided as-is. This is a copy of the experimental software used to generate the data in the article, with only a few changes applied to clean it up for general release. As such, it's unsupported. However I am happy to receive questions and comments by email.


  • An x86/64 Linux system. Other systems will work, but you will at least have to recompile some of the utilities used (e.g. "nm", "glpsol"). I've included x86/64 binaries for convenience.
  • GNU C++ compiler 4.3.x or higher.
  • Python 2.5 plus the Twisted Python modules.
  • Scons build system (for M5).

Cross-compilers for the benchmarks should not be necessary; precompiled binaries are included. However, should you wish to compile them, the necessary source code and build scripts are also available.


The following steps reproduce the results shown in Figure 16 ("article-alphatbl.tex"), Figure 19 ("article-armtbl.tex") and Figure 20 ("article-vstbl.tex"):

  1. Run "make" in the "yttrium" directory.
  2. Run "python prepare.py" in the "yttrium" directory.
  3. Run "./build-vt" in the "yttrium/m5" directory. This takes a while and builds the modified M5 CPU simulators for ARM and Alpha.
  4. Run "python pickleserver.py tasks.dat" in the "yttrium" directory: this program will begin waiting for connections.
  5. Open up another terminal and run "python client.py" in the "yttrium" directory. This will apply the WCET reduction algorithm to produce the O3+VTC results for the ARM and Alpha tests. When it is finished, client.py and pickleserver.py will both exit.
  6. Run "python query.py" to generate the tables. They are placed in the "article" subdirectory.

Intermediate raw data is stored in "tasks.dat".

If you have more than one CPU core, or more than one machine, you can speed up the process by running multiple instances of "python client.py". It's best to run one instance per CPU core, provided that your machine has about 1-2Gb of RAM for each instance (this is needed for the ILP solver). To run on multiple machines, mount the "yttrium" directory over a network (e.g. using sshfs) then run additional clients by adding the hostname of the machine running pickleserver to the client command line.


All the software as a tar.bz2 archive: yttrium.tar.bz2 (19Mb)

(note: "Yttrium" is the codename for this work)


I'm grateful to the M5 project for their excellent CPU simulator; these experiments also make use of the GNU Linear Programming Kit (which I did not modify) and the Malardalen WCET Research Group Benchmarks.

See also

Earlier publications on this subject appeared at the RTAS, RTCSA and RTSS conferences in 2008, and these are available on my publications page. There is some software for the RTSS 2008 paper, which was partly reused for Yttrium. The RTAS 2008 software was published as part of my PhD thesis.