Steven P. Reiss


Performance Analysis

Since most of our programming involves research applications, we are often coding at the limits of the processor and memory.  Getting better performance, especially for interactive applications, has been important.  As such, we both develop and use tools to understand the dynamic behavior of computer systems. 


image of the FIELD heapview tool

Our FIELD programming environment included a number of performance analysis tools, generally with visual interfaces. We modified UNIX gprof to provide dynamic results (rather than only at the end of the run) and results at the line level, and include a graph view of current behavior. Another view showed I/O activity by file or socket as it was happening. Another showed process activity. We also branched out into understanding memory behavior, providing a view showing a map of memory that updated as the program ran with relatively little overhead as seen above.  


2. JIVE and JOVE

JIVE show thread interactions and class/method usage
JIVE show thread interactions and class/method usage

These systems, part of the BLOOM visualization system, were our first stand-alone attempt at low-overhead dynamic monitoring of Java programs as they executed. Using byte code patching (before Java made that easy), JIVE provided a view of what was currently executing down to the method level (grouped into classes and packages where appropriate) and thread states and interactions. JOVE provided execution information by thread at the line-level.



DYVISE thread view

While JIVE and JOVE were fun, they didn't provide the detailed information necessary for performance analysis.  DYVISE use more sophisticated byte-code instrumentation to provide detailed information about cpu, memory, threads, I/O, event, and phase behavior at whatever overhead the developer specified.  Most information was displayed in a tabular form. 



bubbles debugging showing various performance views

Just as FIELD provided a variety of performance tools, our current Code Bubbles environment includes several dynamic performance views. It provides a light-weight instrumentation package that is included in every debugging run. This is used to provide currnt infomration on thread state as well as CPU performance infomration that is updated continually during the run.  Later tools provided a view of threads, tasks, and locking behavior that was specialized to the application and created automatically based on information from prior runs.


7. Automatic Performance Prediction

While the above efforts concentrate on understanding the performance of a system either as it is running or immediately after it has run, Alex Tarvo considered the problem of understanding the performance if the program were run under different circumstances. He did this by building a model of the system and then simulating that model under various assumptions.  The model was built from data collected during a single run of the system.  The model incorporated knowledge of disk and operating system behaviors.  The resultant simulations were able to predict actual performance with about a 10% error, matching the state of the art.    

Last updated: April 8, 2021