| OCR Text |
Show process essentially simulates the operation of the history cache on data from two intervals. Since the merging is done in background, the process can simulate a much larger history cache than is feasible with a real history cache. This method compacts the history at the expense of longer intervals between execution states. If the background process uses a history cache that is the size of the process producing the history, the history becomes essentially a collection of checkpoints. By controlling the density of execution states, this approach enables a continuum of history descriptions with a tradeoff between the density of execution states and the amount of history data. Additional reductions can be obtained by a selective history. A temporal selection switches off the history mechanism during certain phases of program execution. Initialization is a good time to switch off the history. Although it produces large amounts of history data, values present before initialization are mostly meaningless. A spatial selection saves the history of a selected part of the process state. For example, the history of a large global data structure can be saved while the history of local variables is ignored. Temporal selection can be easily implemented by special instructions that turn the history off and on. Spatial selection can be implemented by a hardware filter in the history cache which would eliminate parts of the process state whose history we do not want to save. 5.4.5 Performance of History Cache This section reports the performance of the history cache on real programs using Dynascope. For measured programs, the history cache compacts the history data 2.5 to 25 times. A compaction of 2.5 times was obtained on a program with bad locality. This program was intentionally chosen to examine worst case behavior. A realistic performance of the history cache is probably closer to a compaction of 25 times. 139 |