Deterministic QEMU 

QEMU is an open source emulator and virtualizer that allows an entire guest operating system to be run as a normal process on a host operating system. When such a guest is being run, if we observe the sequence of instructions being executed by the guest, we notice that the sequence is not exactly identical in two different executions from the same initial state. A straightforward reason which explains this behavior is asynchronous interrupts. For  example a keyboard interrupt during one execution sequence might cause the guest to execute extra instructions for interrupt handling and thus would be different from an execution sequence where the corresponding interrupt is absent. However even in the absence of such events, any two such sequences  are not exactly the same.

The goal of this project is therefore to discover reasons which cause such a difference and ensure that qemu runs deterministically. Such a deterministic qemu can be very useful when debugging applications on the guest since it would guarantee that any error is reproduced exactly at the same place in every execution.

A more detailed description of the changes made are explained in the following document.



The following are the links to the unmodified qemu source code and the deterministic patch.

1. The Deterministic Patch (as a tar file. Untar before use.)

2. Unmodified QEMU


The document below has instructions on compiling and running the modified Qemu.