next up previous
Next: Waiting Time Analysis Up: Instrumentation and Visualization Previous: Instrumentation and Visualization

Carnival

Carnival is a performance measurement and analysis tool that supports hierarchical abstraction in the presentation of performance data, maintains links between dynamic measurements and the source code, and automates cause-and-effect analysis of performance phenomena. Performance analysis with Carnival consists of four steps: (i) instrumentation, (ii) program execution, (iii) automated analysis, and (iv) visualization.

During the instrumentation phase a preprocessor uses static information [11] or user hints, which identify the portions of the code where computation is replicated, to insert instrumentation calls into the application code, Each call records the occurrence of an important event, a timestamp, and the basic block (or data structure) in the source code where the event occurred. We link the instrumented code to a library that generates events in a trace file when the application is executed. After execution, the Carnival preprocessor analyzes the trace files, producing a hierarchy of performance profiles, and explanations for various performance phenomena. The results of this analysis (both profiles and explanations) are examined via a Tcl/Tk [13] interface (see figures 1 and 2). More details about the visualization resources provided by Carnival can be found in [11].

The instrumentation library is the only architecture-dependent code in Carnival. To use Carnival with Treadmarks, we only had to implement a global clock within Treadmarks (for recording timestamps) and define the relevant protocol events for our analysis. We implemented a global clock by broadcasting one processor's clock value using the DEC Memory Channel [5]. The accuracy of this global clock is on the order of tens of microseconds.

The relevant events in Treadmarks include lock operations, barriers, page requests, and garbage collection. At the application level we record two types of computation: parallel computation represents parallelized code executed by each processor on different data; replicated computation represents redundant execution performed on each processor as a side-effect of parallelization. Time spent during execution is divided into four categories for analysis: (1) computation, (2) idle time (waiting time), (3) local protocol overhead, and (4) daemon overhead caused by remote requests satisfied locally.


next up previous
Next: Waiting Time Analysis Up: Instrumentation and Visualization Previous: Instrumentation and Visualization

Wagner Meira
Mon Dec 16 23:02:14 EST 1996