JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
Oracle Solaris Studio 12.3: Performance Analyzer     Oracle Solaris Studio 12.3 Information Library
search filter icon
search icon

Document Information

Preface

1.  Overview of the Performance Analyzer

2.  Performance Data

3.  Collecting Performance Data

4.  The Performance Analyzer Tool

Starting the Performance Analyzer

Analyzer Command Options

Java Options

-j | --jdkhome jvm-path

-Jjvm-options

Control Options

-f | --fontsize size

-v | --verbose

Information Options

-V | --version

-? | --h | --help

Analyzer Default Settings

Performance Analyzer GUI

The Menu Bar

The Toolbar

Analyzer Data Displays

Data Tabs in Left Pane

The MPI Timeline Tab

MPI Chart Tab

The Races Tab

The Deadlocks tab

The Functions Tab

The Callers-Callees Tab

The Call Tree Tab

The Dual-Source Tab

The Source/Disassembly Tab

The Source Tab

The Lines Tab

The Disassembly Tab

The PCs Tab

The OpenMP Parallel Region Tab

The OpenMP Task Tab

The Timeline Tab

The LeakList Tab

The DataObjects Tab

The DataLayout Tab

The Inst-Freq Tab

The Statistics Tab

The Experiments Tab

The Index Objects Tabs

The Threads Tab

The Samples Tab

The CPUs Tab

The Seconds Tab

The Processes Tab

The Experiment IDs Tab

The MemoryObjects Tabs

Tabs in Right Pane

The MPI Timeline Controls Tab

The MPI Chart Controls Tab

The Summary Tab

The Timeline Details Tab

The Threads Chart Controls Tab

The Leak Tab

The Race Detail Tab

The Deadlock Detail Tab

Setting Data Presentation Options

Metrics Tab

Sort Tab

Source/Disassembly Tab

Formats Tab

Timeline Tab

Search Path Tab

Pathmaps Tab

Tabs Tab

Finding Text and Data

Showing or Hiding Functions

Filtering Data

Using Context Filters

Managing Filters

Using Custom Filters

Using Labels for Filtering

Recording Experiments from Analyzer

Default Settings for Analyzer

Saving Performance Analyzer Settings

Settings in the .er.rc File

Comparing Experiments

Enabling Comparison Mode By Default

5.  The er_print Command Line Performance Analysis Tool

6.  Understanding the Performance Analyzer and Its Data

7.  Understanding Annotated Source and Disassembly Data

8.  Manipulating Experiments

9.  Kernel Profiling

Index

Performance Analyzer GUI

The Analyzer window has a menu bar, a tool bar, and a split pane that contains tabs for the various data displays.

The Menu Bar

The menu bar contains a File menu, a View menu, and a Help menu.

The File menu is for opening, adding, and dropping experiments and experiment groups. The File menu allows you to collect data for an experiment using the Performance Analyzer GUI. For details on using the Performance Analyzer to collect data, refer to Recording Experiments from Analyzer. From the File menu, you can also create a new Analyzer window and print the data that is currently displayed in the Analyzer to a file or printer.

The View menu allows you to configure how experiment data is displayed.

The Help menu provides online help for the Performance Analyzer, provides a summary of new features, has quick-reference and shortcut sections, and has a troubleshooting section.

The Toolbar

The toolbar provides sets of icons as shortcuts, a View Mode list you can use to change the way data is displayed for some types of experiments, and a Find function to help you locate text or highlighted lines in some tabs. For more details about the Find function, refer to Finding Text and Data.

Analyzer Data Displays

The Performance Analyzer uses a split-window to divide the data presentation into two panes. Each pane is tabbed to allow you to select different data displays for the same experiment or experiment group.

The tabs in the left pane work together so that when you select an item such as a function in one tab, the item is also selected in other tabs. Most of the tabs in the left pane have a context menu that you open by right-clicking on an item in the tab. You can use the context menu to add filters or to perform other activities related to that tab. When you apply filters in one tab, the data is filtered in all the tabs that can be filtered.

The tabs in the right pane show more information about the items that you select in the left pane, and in some cases provide tools for manipulating the information in the tab in the left pane.

Data Tabs in Left Pane

Two factors determine whether a tab is displayed in the left pane of the Analyzer window when you open an experiment:

You can use the Tabs tab in the Set Data Presentation dialog box (see Tabs Tab) to select the tabs you want to display in the current Analyzer session. If you want to change the default tabs, see Default Settings for Analyzer.

The left pane displays tabs for the principal Analyzer displays in the order in which they appear:

The MPI Timeline Tab

The MPI Timeline tab shows a set of horizontal bars, one for each process in the MPI experiment, with diagonal lines connecting them indicating messages. Each bar has regions colored according to the MPI function they are in, or indicating that the process is not within MPI (that is, it is elsewhere in the application code).

Selecting a region of a bar or a message line shows detailed information about the selection in the MPI Timeline Controls tab.

Dragging the mouse causes the MPI Timeline tab to zoom in on the horizontal (time) axis or the vertical (process) axis, depending on the predominant direction of the drag.

You can print an image of the MPI Timeline to a printer or a .jpg file. Choose File -> Print and select Print or File, then specify the printer or filename.

See Oracle Solaris Studio 12.3: Performance Analyzer MPI Tutorial for more information about using the MPI Timeline.

MPI Chart Tab

The MPI Chart tab shows charts of the MPI tracing data displayed in the MPI Timeline tab. It displays plots of data concerning MPI execution. Changing the controls in the MPI Chart tab and clicking Redraw causes a new chart to be displayed. Selecting an element from a chart shows more detailed information about that element in the MPI Chart Controls tab.

Dragging the mouse causes the MPI Chart tab to zoom in on the rectangular area defined by the drag.

You can print an image of the MPI chart to a printer or a .jpg file. Choose File -> Print and select Print or File, then specify the printer or filename.

See Oracle Solaris Studio 12.3: Performance Analyzer MPI Tutorial for more information about using MPI charts.

The Races Tab

The Races tab shows a list of all the data races detected in a data-race experiment. For more information, see Oracle Solaris Studio 12.3: Thread Analyzer User’s Guide.

The Deadlocks tab

The Deadlocks tab shows a list of all the deadlocks detected in a deadlock experiment. For more information, see Oracle Solaris Studio 12.3: Thread Analyzer User’s Guide.

The Functions Tab

The Functions tab shows a list of functions and their metrics. The metrics are derived from the data collected in the experiment. Metrics can be either exclusive or inclusive. Exclusive metrics represent usage only by the function itself. Inclusive metrics represent usage by the function and all the functions it called.

The list of available metrics for each kind of data collected is given in the collect(1) man page and in Chapter 2, Performance Data.

Time metrics are shown as seconds, presented to millisecond precision. Percentages are shown to a precision of 0.01%. If a metric value is precisely zero, its time and percentage is shown as “0.” If the value is not exactly zero, but is smaller than the precision, its value is shown as “0.000” and its percentage as “0.00”. Because of rounding, percentages may not sum to exactly 100%. Count metrics are shown as an integer count.

The metrics initially shown are based on the data collected and on the default settings read from various .er.rc files. When the Performance Analyzer is initially installed, the default metrics are as follows:

If more than one type of data has been collected, the default metrics for each type are shown.

The metrics that are shown can be changed or reorganized; see the online help for details.

To search for a function, use the Find tool. For further details about the Find tool, refer to Finding Text and Data.

To view the source code for a function, double-click on it to open the Source tab at the correct line in the source code.

To select a single function, click on that function.

To select several functions that are displayed contiguously in the tab, select the first function of the group, then Shift-click on the last function of the group.

To select several functions that are not displayed contiguously in the tab, select the first function of the group, then select the additional functions by Ctrl-clicking on each function.

You can also right-click in the Functions tab to open a context menu and select a predefined filter for the selected functions. See the Analyzer help for details about filtering.

The Callers-Callees Tab

The Callers-Callees tab shows the calling relationships between the functions in your code, along with performance metrics. The Callers-Callees tab lets you examine metrics for code branches in detail by building call stack fragments one call at a time.

The tab shows three separate panels: the Callers panel at the top, the Stack Fragment panel in the center, and the Callees panel at the bottom. When you first open the Callers-Callees tab, the function in the Stack Fragment panel is the function that you selected in one of the other Analyzer tabs, such as the Function tab or Source tab. The Callers panel lists functions that call the function in the Stack Fragment panel, and the Callees panel lists functions that are called by the function in the Stack Fragment panel.

You can construct a call stack fragment around the center function, one call at a time, by adding callers and callees to the call stack.

You can add a call to the stack fragment by double-clicking a function in the Callers pane or Callees pane, or by selecting a function and clicking the Add button. You can remove a function call in a similar way, by double-clicking the function at the top or bottom of the call stack fragment, or selecting the top or bottom function and clicking Remove. The Add and Remove tasks can also be performed through the context menu by right-clicking a function and selecting the appropriate command.

You can set a function as the head (top), center, or tail (bottom) of the call stack fragment by selecting the function and clicking Set Head, Set Center, or Set Tail. This new ordering causes other functions currently in the call stack fragment to move to the Callers area or Callees area, to their appropriate location in relation to the new location of the selected function in the stack fragment.

You can use the Back and Forward buttons located above the Stack Fragment panel to go through the history of your changes to the call stack fragment.

As you add and remove functions in the stack fragment, the metrics are computed for the entire fragment and displayed next to the last function in the fragment.

You can select a function in any panel of the Callers-Callees tab and then right-click to open a context menu and select filters. The data is filtered according to your selection in this tab and all the Analyzer data tabs. See the online help for details about using context filters.

The Callers-Callees tab shows attributed metrics:

For more information about metrics, see Function-Level Metrics: Exclusive, Inclusive, and Attributed.

The Call Tree Tab

The Call Tree tab displays a dynamic call graph of the program as a tree with each function call shown as a node that you can expand and collapse. An expanded function node shows all the function calls made by the function, plus performance metrics for those function calls. When you select a node, the Summary tab on the right displays metrics for the function call and its callees. The percentages given for attributed metrics are the percentages of the total program metrics. The default root of the tree is <Total>, which is not a function, but represents 100% of the performance metrics of all the functions of the program.

The Call Tree tab allows you to dig down into specific call traces and analyze which traces have the greatest performance impact. You can navigate through the structure of your program, searching for high metric values.


Tip - To easily find the branch that is consuming the most time, right click any node and select Expand Hottest Branch.


You can right-click in the Call Tree tab to open a context menu and add a predefined filter for the selected branch or selected functions. By filtering in this way you can screen out data in all the Analyzer tabs for areas you are not interested in.

The Dual-Source Tab

The Dual-Source tab shows the two source contexts involved in the selected data race or deadlock. The tab is shown only if data-race-detection or deadlock experiments are loaded. See Oracle Solaris Studio 12.3: Thread Analyzer User’s Guide for more information.

The Source/Disassembly Tab

The Source/Disassembly tab shows the annotated source in an upper pane, and the annotated disassembly in a lower pane. The panes are coordinated so that when you select lines in one pane the related lines in the other pane are also selected. The tab is not visible by default. Use the Set Data Presentation option on the View menu to add the Source/Disassembly tab. Click Save to always show the tab.

The Source Tab

If the source code is available, the Source tab shows the file containing the source code of the selected function, annotated with performance metrics in columns to the left of each source line. High metrics are highlighted in yellow to indicate source lines that are hot areas of resource usage. A yellow navigation marker is also shown in a margin next to the scrollbar on the right for each hot source line. Non-zero metrics that are below the hot threshold are not highlighted, but are flagged with yellow navigation markers. To quickly navigate to source lines with metrics, you can click the yellow markers in the right margin to jump to the lines with metrics. You can also right-click the metrics themselves and select an option such as Next Hot Line or Next Non-Zero Metric Line to jump to the next line with metrics.

The threshold for highlighting metrics can be set in the Set Data Presentation dialog box, in the Source/Disassembly tab. The default threshold can be set in a .er.rc defaults file. See Default Settings for Analyzer for more information about the .er.rc file.

The Source tab shows the full paths to the source file and the corresponding object file, and the name of the load object in the column heading for the source code. In the rare case where the same source file is used to compile more than one object file, the Source tab shows the performance data for the object file containing the selected function.

See How the Tools Find Source Code for a description of the process used to find an experiment's source code.

When you double-click a function in the Functions tab and the Source tab is opened, the source file displayed is the default source context for that function. The default source context of a function is the file containing the function’s first instruction, which for C code is the function’s opening brace. Immediately following the first instruction, the annotated source file adds an index line for the function. The source window displays index lines as text in red italics within angle brackets in the form:

<Function: f_name>

A function might have an alternate source context, which is another file that contains instructions attributed to the function. Such instructions might come from include files or from other functions inlined into the selected function. If there are any alternate source contexts, the beginning of the default source context includes a list of extended index lines that indicate where the alternate source contexts are located.

<Function: f, instructions from source file src.h>

Double clicking on an index line that refers to another source context opens the file containing that source context, at the location associated with the indexed function.

To aid navigation, alternate source contexts also start with a list of index lines that refer back to functions defined in the default source context and other alternate source contexts.

The source code is interleaved with any compiler commentary that has been selected for display. The classes of commentary shown can be set in the Set Data Presentation dialog box. The default classes can be set in a .er.rc defaults file.

The metrics displayed in the Source tab can be changed or reorganized; see the online help for details.

For detailed information about the content of the Source tab, see Performance Analyzer Source Tab Layout.

The Lines Tab

The Lines tab shows a list consisting of source lines and their metrics. Source lines are labeled with the function from which they came and the line number and source file name. If no line-number information is available for a function, or the source file for the function is not known, all of the function’s program counters (PCs) appear aggregated into a single entry for the function in the lines display. PCs from functions that are from load-objects whose functions are hidden appear aggregated as a single entry for the load-object in the lines display. Selecting a line in the Lines tab shows all the metrics for that line in the Summary tab. Selecting the Source or Disassembly tab after selecting a line from the Lines tab positions the display at the appropriate line.

The Disassembly Tab

The Disassembly tab shows a disassembly listing of the object file containing the selected function, annotated with performance metrics for each instruction. You might need to select Machine from the View Mode list in the toolbar to see the disassembly listing.

Interleaved within the disassembly listing is the source code, if available, and any compiler commentary chosen for display. The algorithm for finding the source file in the Disassembly tab is the same as the algorithm used in the Source tab.

Just as with the Source tab, index lines are displayed in Disassembly tab. But unlike with the Source tab, index lines for alternate source contexts cannot be used directly for navigation purposes. Also, index lines for alternate source contexts are displayed at the start of where the #included or inlined code is inserted, rather than just being listed at the beginning of the Disassembly view. Code that is #included or inlined from other files shows as raw disassembly instructions without interleaving the source code. However, placing the cursor on one of these instructions and selecting the Source tab opens the source file containing the #included or inlined code. Selecting the Disassembly tab with this file displayed opens the Disassembly view in the new context, thus displaying the disassembly code with interleaved source code.

The classes of commentary shown can be set in the Set Data Presentation dialog box. The default classes can be set in a .er.rc defaults file by clicking the Save button in the dialog box.

The Analyzer highlights hot lines, which are lines with metrics that are equal to or exceed a metric-specific threshold, to make it easier to find the important lines. You can set the threshold in the Set Data Presentation dialog box. You can set the default threshold in a .er.rc defaults file by clicking the Save button in the dialog box..

As with the Source tab, yellow navigation markers are shown in a margin next to the scrollbar on the right for each source line with metrics. Non-zero metrics that are below the hot threshold are not highlighted, but are flagged with yellow navigation markers. To quickly navigate to source lines with metrics, you can click the yellow markers in the right margin to jump to the lines with metrics. You can also right-click the metrics themselves and select an option such as Next Hot Line or Next Non-Zero Metric Line to jump to the next line with metrics.

For detailed information about the content of the Disassembly tab, see Annotated Disassembly Code.

The PCs Tab

The PCs tab lists program counters (PCs) and their metrics. PCs are labeled with the function from which they came and the offset within that function. PCs from functions that are from load-objects whose functions are hidden appear aggregated as a single entry for the load-object in the PCs display. Selecting a line in the PCs tab shows all the metrics for that PC in the Summary tab. Selecting the Source tab or Disassembly tab after selecting a line from the PCs tab positions the display at the appropriate line.

See the section Call Stacks and Program Execution for more information about PCs.

The OpenMP Parallel Region Tab

The OpenMP Parallel Region tab is applicable only to experiments that were recorded with the OpenMP 3.0 collector, for programs that use OpenMP tasks compiled with Oracle Solaris Studio compilers. See Limitations on OpenMP Profiling for more information.

The tab lists all parallel areas encountered during the program's execution along with metric values computed from the same profiling data. Exclusive metrics are computed for the current parallel region. Inclusive metrics reflect nested parallelism. They are attributed to the current parallel region, and the parent parallel region from which it was created, and further on recursively up to the topmost Implicit OpenMP Parallel Region, representing the serial execution of the program (outside any parallel region). If there are no nested parallel regions in a program, the exclusive and inclusive metrics have the same values.

If a function containing a parallel region is called many times, all instances of the parallel region will be aggregated together and presented as one line item in the corresponding tab.

The tab is useful for navigation. You can select an item of interest, such as the parallel region with the highest OpenMP Wait time, analyze its source or select a context filter to include only the data related to the selected item, and then analyze how the data is represented by other program objects using other tabs: Functions, Timeline, Threads, and so on.

The OpenMP Task Tab

The OpenMP Task tab shows the list of OpenMP tasks with their metrics. The tab is applicable only to experiments that were recorded with the OpenMP 3.0 collector, for programs that use OpenMP tasks compiled with Oracle Solaris Studio compilers. See Limitations on OpenMP Profiling for more information.

The tab lists tasks encountered during the program's execution, along with metric values computed from the profiling data. Exclusive metrics apply to the current task only. Inclusive metrics include metrics for OpenMP tasks plus those of their child tasks, with their parent-child relationship established at the task creation time. The OpenMP Task from Implicit Parallel Region represents the serial execution of the program.

If a function containing a task is called many times, all instances of the parallel region will be aggregated together and presented as one line item in the corresponding tab.

The tab is useful for navigation. You can select an item of interest, such as the task with the highest OpenMP Wait time, analyze its source by clicking the Source tab. You can also select an item, right-click to select a context filter to include only the data related to the selected item and then analyze how it's represented by other program objects using other tabs: Functions, Timeline, Threads, and so on.

The Timeline Tab

The Timeline tab shows a chart of the events and the sample points recorded by the Collector as a function of time. Data is displayed in horizontal bars. For each experiment there is a bar for sample data at the top, and a set of bars follows for each thread. The set of bars for a thread includes a bar for each data type recorded: clock-based profiling, hardware counter overflow profiling, synchronization tracing, heap tracing, and MPI tracing. For hardware counter overflow profiling, there is a bar for each hardware counter. The bar for each data type is displayed only when loaded experiments contain data of that type.

The timing metrics for events shown by the Performance Analyzer correspond to the relative amount of time spent in each state. The samples bar displays a summary of the timing metrics for all the threads in the experiment. Click a sample to display the timing metrics for that sample in the Timeline Details tab on the right. You can also display timing metrics for individual events in the threads by displaying event state charts.

The profiling data or tracing data bars show an event marker for each event recorded. The event markers consist of a color-coded representation of the call stack recorded with the event.

The profiling data or tracing data bars show an event marker for each event recorded. The event markers consist of a color-coded representation of the call stack recorded with the event. Clicking an event marker selects the corresponding call stack for the event and displays the data for that event and the call stack functions in the Timeline Details tab. In the Call Stack for Selected Event area of the Timeline Details tab you can select the individual function calls to see detailed information about them in the Details for Selected Event area of the tab. If you then click the Source tab or Disassembly tab, the line corresponding to that frame in the call stack is highlighted.

For some kinds of data, events may overlap and not be visible. Whenever two or more events would appear at exactly the same position, only one is drawn; if there are two or more events within one or two pixels, all are drawn. although they may not be visually distinguishable. In either case, a small gray tick mark is displayed below the drawn events indicating the overlap. You can see more information about events by displaying event frequency charts.

The Timeline tab of the Set Data Presentation dialog box allows you to change the types of event-specific data that are shown; to select the display of event-specific data for threads, LWPs, CPUs, or experiments; to choose to align the call stack representation at the root or at the leaf; and to choose the number of levels of the call stack that are displayed. You can also select to display event frequency charts and event state charts in some timeline bars.

An event frequency chart is a line chart that displays frequency of events as a function of time. To enable event frequency charts, select Event Frequency Chart in the Timeline tab of the Set Data Presentation dialog box. For each enabled data type, an event frequency chart is then displayed immediately below the associated timeline data bar.

An event state chart is a bar chart that shows the distribution of application time spent in various states as a function of time. For clock profiling data recorded on Oracle Solaris, the event state chart shows Oracle Solaris microstates. The color coding for the event state chart is the same as for the timeline samples bar. To enable event state charts, select Event State Chart in the Timeline tab of the Set Data Presentation dialog box. Event state charts are then shown below the associated data bars. If event frequency charts are also enabled, the state chart is displayed below the frequency chart.

For details about using the Timeline tab, refer to the online help.

The LeakList Tab

The LeakList tab shows two lines, the upper one representing leaks, and the lower one representing allocations. Each contains a call stack, similar to that shown in the Timeline tab, in the center with a bar above proportional to the bytes leaked or allocated, and a bar below proportional to the number of leaks or allocations.

Selection of a leak or allocation displays the data for the selected leak or allocation in the Leak tab, and selects a frame in the call stack, just as it does in the Timeline tab.

You can display the LeakList tab by selecting it in the Tabs tab of the Set Data Presentation dialog box (see Tabs Tab). You can make the LeakList tab visible only if one or more of the loaded experiments contains heap trace data.

The DataObjects Tab

The DataObjects tab shows the list of data objects with their metrics. The tab applies only to experiments that include dataspace profiling, which is an extension of hardware counter overflow profiling. See Dataspace Profiling and Memoryspace Profiling for more information.

You can display the tab by selecting it in the Tabs tab of the Set Data Presentation dialog box (see Tabs Tab). You can make the DataObjects tab visible only if one or more of the loaded experiments contains a dataspace profile.

The tab shows hardware counter memory operation metrics against the various data structures and variables in the program.

To select a single data object, click on that object.

To select several objects that are displayed contiguously in the tab, select the first object, then press Shift while clicking on the last object.

To select several objects that are not displayed contiguously in the tab, select the first object, then select the additional objects by pressing Ctrl while clicking on each object.

The DataLayout Tab

The DataLayout tab shows the annotated data object layouts for all program data objects with data-derived metric data. The tab is applicable only to experiments that include dataspace profiling, which is an extension of hardware counter overflow profiling. See Dataspace Profiling and Memoryspace Profiling for more information.

The layouts appear in the tab sorted by the data sort metrics values for the structure as a whole. The tab shows each aggregate data object with the total metrics attributed to it, followed by all of its elements in offset order. Each element, in turn, has its own metrics and an indicator of its size and location in 32–byte blocks.

The DataLayout tab can be displayed by selecting it in the Tabs tab of the Set Data Presentation dialog box (see Tabs Tab). As with the DataObjects tab, you can make the DataLayout tab visible only if one or more of the loaded experiments contains a dataspace profile.

To select a single data object, click on that object.

To select several objects that are displayed contiguously in the tab, select the first object, then press the Shift key while clicking on the last object.

To select several objects that are not displayed contiguously in the tab, select the first object, then select the additional objects by pressing the Ctrl key while clicking on each object.

The Inst-Freq Tab

The Inst-Freq, or instruction-frequency, tab shows a summary of the frequency with which each type of instruction was executed in a count-data experiment, which is collected with collect -c. The tab also shows data about the frequency of execution of load, store, and floating-point instructions. In addition, the tab includes information about annulled instructions and instructions in a branch delay slot.

The Statistics Tab

The Statistics tab shows totals for various system statistics summed over the selected experiments and samples. The totals are followed by the statistics for the selected samples of each experiment. For information on the statistics presented, see the getrusage(3C) and proc (4) man pages.

The Experiments Tab

The Experiments tab is divided into two panels. The top panel contains a tree that includes nodes for the load objects in all the loaded experiments, and for each experiment loaded. When you expand the Load Objects node, a list of all load objects is displayed with various messages about their processing. When you expand the node for an experiment, two areas are displayed: a Notes area and an Info area.

The Notes area displays the contents of any notes file in the experiment. You can edit the notes by typing directly in the Notes area. The Notes area includes its own toolbar with buttons for saving or discarding the notes and for undoing or redoing any edits since the last save.

The Info area contains information about the experiments collected and the load objects accessed by the collection target, including any error messages or warning messages generated during the processing of the experiment or the load objects.

The bottom panel lists error and warning messages from the Analyzer session.

The Index Objects Tabs

Each Index Objects tab shows the metric values from data attributed to various index objects, such as Threads, Cpus, and Seconds. Inclusive and Exclusive metrics are not shown, since Index objects are not hierarchical. Only a single metric of each type is shown.

Several Index Objects tabs are predefined: Threads, Cpus, Samples, Seconds, Processes, and Experiment IDs. These tabs are described separately below.

You can define a custom index object by clicking on the Add Custom Index Tab button in the Set Data Presentation dialog box to open the Add Index Objects dialog box. You can also define an index object with an indxobj_define directive in an .er.rc file (see indxobj_define indxobj_type index_exp).

The Threads Tab

The Threads tab is an Index Object tab that is not displayed by default. You can select it in the Tabs tab in the Set Data Presentation dialog box. If you click the Save button in this dialog box, the selections are saved as defaults to your .er.rc file.

The Threads tab shows a list of threads and their metrics. The threads are represented by a thread number and show the User CPU time by default for clock-profiling experiments. Other metrics might also be displayed by default if the metrics are present in the loaded experiments.

You can use radio buttons to select the type of display: Text (the default), Graphical, or Chart. The Text display is similar to the Functions tab but shows only exclusive metrics attributed to each thread. The Graphical display shows bar graphs of the relative values for each thread with a separate histogram for each metric. The histogram is sorted by the data sort metric that is in effect in the Text display mode. For the Text and Graphical displays, you can click with the mouse or use arrow keys to navigate the tab and see more information in Summary tab on the right about the currently selected item.

The Chart display shows charts of threads versus other metrics, such as User CPU time or Sync Time. By default, a Load Imbalance chart is shown, which helps detect threads that used much higher CPU time.

The Load Imbalance chart shows the amount of real time lost due to uneven thread loading, expressed in seconds and percent in the Threads Chart Controls tab on the right. If the threads were perfectly balanced, there would be a performance improvement close to these values. Better load balance might be achieved by dividing the task being performed by the heavily loaded threads into shorter tasks and distributing them among available threads.

The Lock Contention chart shows the distribution of the Sync Wait Time across threads, which helps to see how much time is lost because of synchronization between threads, and which threads lost more than others.

To change the type of chart, select the Chart Name in the Threads Chart Controls tab on the right and click Redraw.

Click the bars in the chart or click the Up and Down buttons in the navigation bar in the Threads Chart Controls tab to select particular threads and view metric information in the Threads Chart Controls tab.

You can also right-click and select navigation options from the context menu.

The Samples Tab

The Samples tab is an Index Object tab that is not displayed by default. You can select it in the Tabs tab in the Set Data Presentation dialog box. If you click the Save button in this dialog box, the selections are saved as defaults to your .er.rc file.

The Samples tab shows a list of sample points and their metrics. The Samples are represented by Sample numbers and show the User CPU time by default for clock-profiling experiments. Other metrics might also be displayed if the metrics are present in the loaded experiments.

You can use radio buttons to select the type of display: Text or Graphical. The Text mode is displayed by default and shows a display similar to the Functions tab. The metrics values reflect the microstates recorded at each sample point in the loaded experiments.

The Graphical display shows bar graphs of the relative values for each Sample with a separate histogram for each metric. The histogram is sorted by the data sort metric that is in effect in the Text display mode.

You can also right-click to add context filters to filter the data shown in this and other Analyzer tabs.

The CPUs Tab

The CPUs tab is an Index Object tab that is not displayed by default. You can select it in the Tabs tab in the Set Data Presentation dialog box. If you click the Save button in this dialog box, the selections are saved as defaults to your .er.rc file.

The CPUs tab shows a list of CPUs that the experiment ran on, along with their associated metrics. The CPUs are represented by a CPU number and show the User CPU time by default for clock-profiling experiments. Other metrics might also be displayed by default if the metrics are present in the loaded experiments. If you have selected other metrics in the Set Data Presentation dialog box, they are also displayed.

You can use radio buttons to select the type of display: Text or Graphical. The Text mode is displayed by default and shows a display similar to the Functions tab. The values reflect the value or percentage of the metrics that were recorded on each CPU in the loaded experiments.

The Graphical display shows bar graphs of the relative values for each CPU with a separate histogram for each metric. The histogram is sorted by the data sort metric that is in effect in the Text display mode.

You can right-click to add context filters to filter the data shown in this and other Analyzer tabs.

The Seconds Tab

The Seconds tab is an Index Object tab that is not displayed by default. You can select it in the Tabs tab in the Set Data Presentation dialog box. If you click the Save button in this dialog box, the selections are saved as defaults to your .er.rc file.

The Seconds tab shows each second of the program run that was captured in the experiment, along with a metrics collected in that second. Seconds differ from Samples in that they are periodic samples that occur every second beginning at 0 and the interval cannot be changed. The Seconds tab lists the seconds of execution with the User CPU time by default for clock-profiling experiments. Other metrics might be displayed if the metrics are present in the loaded experiments.

You can use radio buttons to select the type of display: Text or Graphical. The Text mode is displayed by default and shows a display similar to the Functions tab. The metric values reflect the microstates recorded at each second in the loaded experiments.

The Graphical display shows bar graphs of the relative values for each second with a separate histogram for each metric. The histogram is sorted by the data sort metric that is in effect in the Text display mode.

You can right-click to add context filters to filter the data shown in this and other Analyzer tabs.

The Processes Tab

The Processes tab is an Index Object tab that is not displayed by default. You can select it in the Tabs tab in the Set Data Presentation dialog box. If you click the Save button in this dialog box, the selections are saved as defaults to your .er.rc file.

The Processes tab shows a list of processes that the target program ran, along with their associated metrics. The processes are listed by their PIDs and show the User CPU time by default for clock-profiling experiments. Other metrics might also be displayed by default if the metrics are present in the loaded experiments. If you have selected other metrics in the Set Data Presentation dialog box, they are also displayed.

The Processes tab enables you find the processes that used the most resources. If there is a particular set of processes that you want to isolate and explore using other tabs, you can filter out other processes using the filters available in the context menu.

You can use radio buttons to select the type of display: Text or Graphical. The Text mode is displayed by default and shows a display similar to the Functions tab. The values reflect the value or percentage of the metrics that were recorded on each process in the loaded experiments.

The Graphical display shows bar graphs of the relative values for each PID with a separate histogram for each metric. The histogram is sorted by the data sort metric that is in effect in the Text display mode.

The Experiment IDs Tab

The Experiment IDs tab is an Index Object tab that is not displayed by default. You can select it in the Tabs tab in the Set Data Presentation dialog box. If you click the Save button in this dialog box, the selections are saved as defaults to your .er.rc file.

The Experiment IDs tab shows a list of experiments that are loaded, along with their associated metrics. You can filter out other experiments using the filters available in the context menu.

You can use radio buttons to select the type of display: Text or Graphical. The Text mode is displayed by default and shows a display similar to the Functions tab. The values reflect the value or percentage of the metrics that were recorded on each process in the loaded experiments.

The Graphical display shows bar graphs of the relative values for each PID with a separate histogram for each metric. The histogram is sorted by the data sort metric that is in effect in the Text display mode.

The MemoryObjects Tabs

Each MemoryObjects tab shows the metric values for dataspace metrics attributed to the various memory objects such as pages. If one or more of the loaded experiments contains a dataspace profile, you can select the memory objects for which you want to display tabs in the Tabs tab of the Set Data Presentation dialog box. Any number of MemoryObjects tabs can be displayed.

Various MemoryObjects tabs are predefined. Memory objects are predefined for virtual and physical pages with names such as Vpage_8K, Ppage_8K, Vpage_64K, and so on. You can define a custom memory object by clicking the Add Custom Object button in the Set Data Presentation dialog box to open the Add Memory Objects dialog box. You can also define a memory object with a mobj_define directive in an .er.rc file (see mobj_define mobj_type index_exp).

A radio button on each MemoryObjects tab lets you select either a Text display or a Graphical display. The Text display is similar to the display in the DataObjects tab and uses the same metric settings. The Graphical display shows a graphical representation of the relative values for each memory object, with a separate histogram for each metric sorted by the data sort metric.

Tabs in Right Pane

The right pane contains the Summary tab, the Timeline Details tab, the Threads Chart Controls tab, the MPI Timeline Controls tab, the MPI Chart Controls tab, the Race Detail tab, Deadlock Detail tab, and Leak tab. By default the Summary tab is displayed.

The MPI Timeline Controls Tab

The MPI Timeline Controls tab supports zoom, pan, event-step, and filtering for the MPI Timeline tab. It includes a control to adjust the percentage of MPI messages shown on MPI Timeline tab.

Filtering causes data outside the current field of view to be eliminated from the data set shown in the MPI Timeline tab and the MPI Chart tab. A filter is applied by clicking the Filter button. The back-filter button is used to undo the last filter; the forward-filter button is used to reapply a filter. Filters are shared between the MPI Timeline tab and the MPI Chart tab, but are not currently applied to other tabs.

The message slider can be adjusted to control the percentage of messages displayed. When you select less than 100%, priority is given to the most costly messages. Cost is defined as the time spent in the message's send and receive functions.

The MPI Timeline Controls tab is also used to show the details for a function or message selection from the MPI Timeline tab.

The MPI Chart Controls Tab

The MPI Chart Controls tab has a set of drop-down lists to control the type of chart, the parameters for the X and Y axes, and the Metric and Operator used to aggregate the data. Clicking Redraw causes a new graph to be drawn.

Filtering causes data outside the current field of view to be eliminated from the data set shown in the MPI Timeline tab and MPI Chart tab. A filter is applied by clicking the Filter button. The back-filter button is used to undo the last filter; the forward-filter button is used to reapply a filter.

The MPI Chart Controls tab is also used to show the details for a selection from the MPI Chart tab.

The Summary Tab

The Summary tab shows all the recorded metrics for the selected function or load object, both as values and percentages, and information on the selected function or load object. The Summary tab is updated whenever a new function or load object is selected in any tab.

The Timeline Details Tab

The Timeline Details tab shows detailed data for the event that is selected in the Timeline tab, including the event type, leaf function, LWP ID, thread ID, and CPU ID. Below the data panel the call stack is displayed. The program counter (PC) for each frame in the call stack is displayed as a function plus an offset. The color coding that is used for the functions in the event markers is shown to the left of the PCs. Clicking a function in the call stack makes it the selected function, so it is also selected in the main Analyzer tabs such as the Function tab. Double-clicking a function in the call stack brings up the Function Color Chooser which enables you to change the colors used for functions in the Timeline.

When a sample is selected in the Samples bar of the Timeline tab, the Timeline Details tab shows the sample number, the start and end time of the sample, and the microstates with the amount of time spent in each microstate and the color coding.

The Threads Chart Controls Tab

The Threads Chart Controls tab is displayed when you select a Chart display in the Threads tab.

By default, a Load Imbalance chart is shown, which helps detect threads that used much higher CPU time. To view a different type of chart, select the Chart Name in the Threads Chart Controls tab on the right and click Redraw.

The Load Imbalance chart shows the amount of real time lost due to uneven thread loading, expressed in seconds and percent, displayed in the Details area. If the threads were perfectly balanced, there would be a performance improvement close to these values. Better load balance might be achieved by dividing the task being performed by the heavily loaded threads into shorter tasks and distributing them among available threads.

You can use the Threads Chart Controls tab to navigate among the threads in the chart by clicking the Up and Down buttons in the navigation bar. When you select a thread, metric information is displayed in the Details area of the Threads Chart Controls tab.

You can click the Center button in the navigation bar to redisplay the metrics for the load imbalance in the Details area.

The Lock Contention chart shows the distribution of the Sync Wait Time across threads, which helps to see how much time is lost because of synchronization between threads, and which threads lost more than others.

The Leak Tab

The Leak tab shows detailed data for the selected leak or allocation in the Leaklist tab. Below the data panel, the Leak tab shows the call stack at the time when the selected leak or allocation was detected. Clicking a function in the call stack makes it the selected function.

The Race Detail Tab

The Race Detail tab shows detailed data for the selected data race in the Races tab. See the Oracle Solaris Studio 12.3: Thread Analyzer User’s Guide for more information.

The Deadlock Detail Tab

The Deadlock Detail tab shows detailed data for the selected Deadlock in the Deadlocks tab. See the Oracle Solaris Studio 12.3: Thread Analyzer User’s Guide for more information.

Setting Data Presentation Options

You can control the presentation of data from the Set Data Presentation dialog box. To open this dialog box, click the Set Data Presentation button in the toolbar or choose View -> Set Data Presentation.

The Set Data Presentation dialog box has a tabbed pane with the following tabs:

The OK button in this dialog box applies the changes you made for the current session, and closes the dialog box. The Apply button applies the changes for the current session, but keeps the dialog box open so you can make more changes.

The Save button stores the current settings including the tabs displayed, and any custom-defined memory objects, to a .er.rc file in your home directory or the current working directory. Saving the settings causes the changes you made to apply to future Analyzer sessions as well as the current session.


Note - The .er.rc file provides the default settings for the Analyzer, the er_print utility, and the er_src utility. When you save changes in the Set Data Preferences dialog box, the changes update the .er.rc file which affects the output from all three utilities. See Default Settings for Analyzer for more information about .er.rc file.


Metrics Tab

The Metrics tab allows you to choose the metrics that are displayed in most of the Analyzer tabs including Functions, Callers-Callees, Source, Disassembly, and others. Some metrics can be displayed in your choice of time or percentage, while others are displayed as a value. The list of metrics includes all metrics that are available in any of the experiments that are loaded.

For each metric, check boxes are provided for Time and Percentage, or Value. Select the check boxes for the types of metrics that you want the Analyzer to display. If you want to select or deselect all the metrics in a particular column, select the check boxes in the bottom row of the dialog box and then click the Apply to all metrics button.


Note - You can only choose to display exclusive and inclusive metrics. Attributed metrics are always displayed in the Call Tree tab if either the exclusive metric or the inclusive metric is displayed.


Sort Tab

The Sort tab shows the order of the metrics presented, and the choice of metric to sort by. Double-click on the metric to use for sorting, and use the Move Up and Move Down buttons to change the order of the metrics. The choices you make here determine the default presentation of the metrics in the Analyzer data tabs. While viewing data tabs, you can change the sort order by clicking the column heading of the metric you want to sort by. You can change the order of the columns of metrics by dragging the column headings.

Source/Disassembly Tab

The Source/Disassembly tab presents a list of check boxes that you can use to select the information presented, as follows:

Formats Tab

The Formats tab presents a choice for the long form, short form, or mangled form of C++ function names and Java method names. Mangled function names are compiler-generated names created when using compiler optimization, which the Analyzer “demangles” when you use the long form or short form function names.

If you select the Append SO name to Function name checkbox, the name of the shared object in which the function or method is located is appended to the function name or method name.

If you select the Compare Experiments option, when you load multiple experiments the data of the experiments is shown in separate columns. By default the data is aggregated when multiple experiments are loaded. See Comparing Experiments for more information.

The Formats tab also presents a choice for View Mode of User, Expert, or Machine to set the default mode for viewing experiments. You can switch the current view using the View Mode list in the toolbar. The View Mode setting controls the view of only Java experiments and OpenMP experiments.

For Java experiments:

See Java Profiling View Modes for more detailed descriptions of the view modes for Java experiments.

For OpenMP experiments:

See Overview of OpenMP Software Execution for more detailed descriptions of the view modes for OpenMP experiments.

For all other experiments, all three modes show the same data.

Timeline Tab

The Timeline tab of the Set Data Presentation dialog box presents choices for the information displayed in the Timeline tab in the main Analyzer panel. You can select the types of event-specific data that are shown, the display of event-specific data for threads, LWP, CPUs, or experiments; the alignment of the call stack representation at the root or at the leaf; and the number of levels of the call stack that are displayed. You can also select Event Frequency Charts and Event State Charts, which are explained in The Timeline Tab.

Click the Help button in the Set Data Presentation dialog box for more detailed information about the Timeline tab.

Search Path Tab

The Search Path tab sets the path used for finding the loaded experiment's associated source and object files for displaying annotated source data in the Source and Disassembly tabs. The search path is also used to locate the .jar files for the Java Runtime Environment on your system. The special directory name $expts refers to the set of current experiments, in the order in which they were loaded. Only the founder experiment is looked at when searching $expts, no descendant experiments are examined.

By default the search path is set to $expts and . (the current directory). You can add other paths to search by typing or browsing to the path and clicking Append. To edit paths in the list, select a path, edit it in the Paths field, and click Update. To change the search order, select a path in the list and click the Move Up/ Move Down buttons.

See How the Tools Find Source Code for more information about how the search path is used.

Pathmaps Tab

The Pathmaps tab enables you to map the leading part of a file path from one location to another to help the Analyzer locate source files. A path map is useful for an experiment that has been moved from the original location it was recorded or is being viewed from a different machine with a different path to the files on a network. When the source can be found the Analyzer can display annotated data in the Source and Disassembly tabs.

For example, if the experiment contains paths specified as /a/b/c/d/sourcefile and soucefile is now located in /x, you can use the Pathmaps tab to map /a/b/c/d/ to /x/. Multiple path maps can be specified, and each is tried in order to find a file.

See How the Tools Find Source Code for more information about how the path maps are used.

Tabs Tab

You can use the Tabs tab of the Set Data Presentation dialog box to select the tabs to be displayed in the Analyzer window. If you click the Save button in this dialog box, the selections are saved as defaults to your .er.rc file.

The Tabs tab lists the applicable tabs for the current experiment. The standard tabs are listed in the left column. The Index Objects tabs are listed in the center column, and the defined Memory Objects tabs are listed in the right column.

In the left column, click the checkboxes to select or deselect standard tabs for display.

In the center column, click the check boxes to select or deselect Index Objects tabs for display. The predefined Index Objects tabs are Threads, Cpus, Samples, and Seconds. To add a tab for another index object, click the Add Custom Index Tab button to open the Add Index Object dialog. In the Object name text box, type the name of the new object. In the Formula text box, type an index expression to be used to map the recorded physical address or virtual address to the object index. For information on the rules for index expressions, see indxobj_define indxobj_type index_exp

In the right column, click the check boxes to select or deselect Memory Object tabs for display. These tabs have data if the experiment contains hardware counter overflow profiling data. Memory objects represent components in the memory subsystem, such as cache lines, pages, and memory banks. Memory objects are predefined for virtual and physical pages, for sizes of 8KB, 64KB, 512KB, and 4MB. To add a custom object, click the Add Custom Object button to open the Add Memory Object dialog box. In the Object name text box, type the name of the new custom memory object. In the Formula text box, type an index expression to be used to map the recorded physical address or virtual address to the object index. For information on the rules for index expressions, see mobj_define mobj_type index_exp

When you have added a custom index object or memory object, a checkbox for that object is added to the Tabs tab and is selected by default.