Skip to content

A framework for the deterministic record and replay of multi-threaded applications

Notifications You must be signed in to change notification settings

vishalmistry/imitate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Imitate

Imitate is a portable low-overhead framework and associated tools which will allow the recording of executions of applications (both single- and multi-threaded) such that they can be deterministically replayed in the future. The purpose of such a framework is to allow for the recording of applications in production environments so that errors resulting from non-determinism due to data races, incorrect synchronisation, and other concurrency issues, can be reproduced and debugged. I created Imitate as part of my final year individual project at Imperial College London.

In addition to portability and debugging by replay, one of the other main goals is to allow the traces generated by the framework to be easily amenable to debugging by trace analysis as this can enable debugging to be automated. The framework can also have other uses, such as data recovery in the event of corruption and for attack analysis in the event of a security violation in the application being recorded. However, they were not of primary concern for the implementation provided.

Additional Documentation

Please refer to the dissertation report PDF document (dissertation.pdf) for background, related work and technical documentation for Imitate.

Compiling and running

  1. Install libiberty, libdwarf, libelf and development headers.
  2. Adjust DYNINST_ROOT variable in scripts/dyninst_env to match location of Dyninst (lib/dyninst-5.0.1). This must be an absolute path.
  3. Load environment variables by running source scripts/dyninst_env
  4. Compile DynInst by running ./build build in the lib/dyninst-5.0.1/core directory
  5. Apply patch supplied in linux-2.6.20.3.patch file to the Linux kernel source and compile and install kernel and development headers.
  6. Boot into patched kernel.
  7. Load environment variables by running source scripts/dyninst_env as above
  8. Go into the module/ directory and compile and load kernel module by running make clean all, and then sudo make install
  9. Compile the record and replay monitors by going into the record/ and replay/ directories respectively and running make clean all
  10. You should now be able to use the monitors to record and replay processes. See the output from the record and replay programs for usage information

Credits

The creation of Imitate would not have possible without the use of DynInst. This repository contains the unmodified distribution of DynInst 5.0.1 in the lib folder for convenience. For copyright and licence information of DynInst please check the README file within the distribution.

License

Imitate is release under the GPL v2 License

About

A framework for the deterministic record and replay of multi-threaded applications

Resources

Stars

Watchers

Forks

Packages

No packages published