| OpenIMPACT | Current Status | Software Releases | FAQ

OpenIMPACT Control Speculation Patch


This page contains extra files that are needed to run OpenIMPACT binaries compiled to use control speculation. These are highest performance binaries that OpenIMPACT can produce, but require a specially patched kernel to work properly.

General speculation overview

OpenIMPACT currently operates with either no control speculation, or with general speculation. The general speculation model, in contrast to the recovery code model, handles page faults on speculative loads immediately. If a page fault occurs and the OS determines that the load's source was invalid, it will mark the load's destination register as NaT ("not a thing"). If the program attempts to use the contents of this register, it will cause a terminal exception and the kernel will kill the process.

For instance, IMPACT may schedule a speculative load that dereferences a pointer, prior to the program testing to see if the pointer is NULL. When this happens, the kernel needs to have code to handle this case, so that it does not terminate the program without cause. (Naturally, if the program realizes that the pointer was NULL and does not attempt to use the data from the speculated load, it should not be terminated.) Since our compiler does not yet generate recovery code that would allow speculative load exceptions to be handled in user space, the chatr -r command and the IMPACT kernel patch are necessary in order to reliably use control speculation.

Kernel patch
linux-2.4.20.tar.bz2 Linux 2.4.20 tarball from kernel.org.
linux-2.4.20-ia64-021210.diff.gz IA-64 patch for 2.4.20. This should be applied prior to applying the general speculation patch.
linux-2.4.20-impact.diff The general speculation patch for kernel 2.4.20. After applying this patch, it is necessary to enable CONFIG_IA64_NORECOV under "Kernel hacking" in the build configuration.


General Speculation Utilities
gel-chatr-0.0.tgz The current Gelato version of HP's chatr command-line utility. This is needed if you are compiling a program and linking it against a library compiled using OpenIMPACT with control speculation. After producing a binary, you must run chatr -r binary to tell the kernel that the executable does not contain recovery code. If this is not performed, your program may fail intermittently with "Illegal instruction" errors. This tarball contains the source, a Makefile, and a statically linked binary.