Embedded computer systems have become essential to many aspects of our lives. Cheaper, smaller, faster, more sophisticated, and more energy-efficient embedded devices spur ever new applications. However, the growing complexity and shift to multicores make programming and debugging these systems difficult. Traditional debugging is time consuming and may interfere with program execution, causing some bugs to become irreproducible and making it unusable in real-time environments. Moreover, tracing a processor?s internal state during execution is only feasible for short program segments and requires large on-chip buffers or wide trace ports, either of which increases system cost and limits scalability. This project is developing the next generation of trace compression methods and infrastructure to make continuous, real-time, unobtrusive, and cost-effective program, data, and bus tracing possible in embedded systems. The approach relies on on-chip hardware to record the processor state and corresponding software modules in the debugger. The novel insight is that a sequence of trace records can be translated, without loss of information, into a much shorter sequence of miss events using small hardware structures. The few remaining miss events are then further compressed using highly-effective yet simple-to-implement encoding schemes, yielding heretofore unseen compression ratios.
The new tracing and debugging infrastructure can help programmers find difficult and intermittent software bugs faster, thus improving productivity. For example, reducing debugging time by just one percent amounts to hundreds of millions of dollars annually in saved salaries, with a concomitant reduction in software cost and time to market. Moreover, higher quality software may eliminate errors in medical, automotive, or mission-critical devices and thus save lives.