Note: If you are interested in Deionization, I suggest you instead take
a look at the Bespoke Silicon Group's Panic Room aka newlib dramfs,
which is a more flexible way of attaining the same result! (Twenty years of having a problem in the back of your head can lead to really good solutions!)
Credit goes to Bandhav Veluri for making it a reality.

The MIT Deionizer

What is deionization?

Deionization is a specialized form of partial evaluation. A deionizer performs partial evaluation; however it intentionally abstains from optimizing the output program against the input. The purpose of a deionizer is not to optimize the performance of the program, but rather to allow it to run without accessing the original input devices.

Application Embedding

One use of deionization is for application embedding. For instance, an application may make use of a number of data files (for instance, bitmaps in a game). Although the developer may want to develop these files separately in source form (say, a .gif file), deionization can be used to wrap these files together into a single binary that is sent to the user. Or, in the case of an embedded system that does not have certain I/O devices, deionization allows the program to be written as if those I/O devices existed. A final binary, containing the source and data, and suitable for burning to a read-only memory, can then be rendered by the deionizer.

Benchmark Precision

A deionizer can also be used to improve the precision of benchmarks in computer systems. This usage, the focus of this short paper, allows the I/O and operating system calls to be removed from benchmark applications. The deionizer described in this paper was used to improve the accuracy of collected results in a comparison between a Pentium 3 system and a Raw processor in the 2004 Raw ISCA Paper.

This has two benefits:

1. Deionization removes the dependence of program running time on portions of computing systems that are not salient to the experiment being undertaken. For instance, when comparing two processor implementations, it is typical to measure the running time of the same application and data set on the two machines. However, differing implementations of operating systems, I/O architecture, motherboards, network file systems, and hard drives may cloud our ability to draw conclusions about the impact of the processor on the running time of the program.

2. Deionization eliminates many sources of variability for data collection, even for successive runs of the same application on the same machine. The running time of a program that does I/O can be dependent on the history of the operating system's file system cache, the position of disk platters as they spin, or even the temperature of the hard drive or processor. If the collecting machine uses network file storage, the timing variance can be even worse. Thus, deionization can decrease the noise margins of experiments, allowing more accurate measurements to be made.


I have create a tool that helps create deionized binaries. It requires GNU binutils 2.10 (or better) and a C compiler, on the target platform.

Download deionizer 1.14.
Download deionizer 1.13.

The README file inside the tar file has instructions on how to use it.

Click here for the deionizer overview.

Michael Taylor

Email: em be tee ay why el oh are at you see es dee dot ee dee you.