Platform Independent Checkpointing of a C-Program in Execution

Abstract

Process checkpointing is a technique to store the state of a process during normal execution. It has been extensively used to provide support for software fault-tolerance, process migration and playback debugging. Most of the research on process checkpointing has focussed on homogeneous process checkpointing. The current trend towards heterogeneity in high performance distributed systems, wide area computing, mobile computing requires the flexibility of process restart on a different operating system and/or architecture. This paper proposes an operating system, architecture and compiler independent approach to checkpointing of a C-program in execution. Our approach is language-based in the sense that process checkpointing is accomplished merely by instrumenting the source program independently of the underlying compiler, operating system or the architecture. Besides this, the paper has two main contributions. Firstly, it demonstrates how to keep track of dynamically allocated memory and the type of data item stored in it in an unsafe language like C with small run-time and space overhead. Secondly, it shows how static program analysis can help in reducing checkpointing overhead. The checkpointing strategies developed in this paper demonstrate this fact. We have implemented a C-precompiler that is currently capable of instrumenting small C programs to make them capable of capturing their internal dynamic state. Preliminary results have been encouraging and have shown small space and time overheads.