Difference between revisions of "RCUG 3 Terminology and Concepts"

From OC Systems Wiki!
Jump to: navigation, search
m
m
Line 5: Line 5:
  
 
RootCause User Guide
 
RootCause User Guide
 
</div>
 
  
 
= Terminology and Concepts =
 
= Terminology and Concepts =
  
 
----
 
----
</div><div><div>
 
 
<!-- header -->      {{FULLPAGENAME}}
 
  
 
rcc-6
 
rcc-6
  
<DIV><A NAME=HEADING6></A><DIV>
 
<A HREF=rcc-7.html>[Next]</A><A HREF=rcc-5.html>[Previous]</A><A HREF=rcc-1.html>[Top]</A><A HREF=rcc-3.html>[Contents]</A><A HREF=rcc-14.html>[Index]</A>
 
RootCause</DIV><A NAME="LINK-03terminology_rc.fm-firstpage"></A><A NAME=HEADING6-0></A><A NAME="UID-03terminology_rc.fm-864080"></A><H1><A NAME=MARKER-9-335></A> Terminology and Concepts</H1>
 
 
----
 
----
  
 
  RootCause® is an extension of the Aprobe® product, a powerful general-purpose patching tool that has been in use for years. As such, much of the terminology, organization and documentation of RootCause refer to those of Aprobe.  
 
  RootCause® is an extension of the Aprobe® product, a powerful general-purpose patching tool that has been in use for years. As such, much of the terminology, organization and documentation of RootCause refer to those of Aprobe.  
  Here we describe general terminology and concepts that apply to RootCause and Aprobe, focusing on the RootCause product. A minimal amount of Aprobe documentation is supplied here, just enough to support the RootCause definitions. For additional information, see the <A HREF=cover.html>Aprobe user's guide</A> ($APROBE/Aprobe.pdf)<A NAME=MARKER-10-338></A>.<A NAME=HEADING6-3></A><A NAME="UID-03terminology_rc.fm-944228"></A><H2> The RootCause Product</H2>
+
  Here we describe general terminology and concepts that apply to RootCause and Aprobe, focusing on the RootCause product. A minimal amount of Aprobe documentation is supplied here, just enough to support the RootCause definitions. For additional information, see the [[cover.html>Aprobe user's guide</DIV> ($APROBE/Aprobe.pdf)<DIV ID=MARKER-10-338></DIV>.<DIV ID=HEADING6-3></DIV><DIV ID="UID-03terminology_rc.fm-944228"></DIV><H2> The RootCause Product</H2>
  We use the terms <EM><A NAME=MARKER-2-339></A>application</EM> and <EM><A NAME=MARKER-2-340></A>program</EM> interchangeably throughout the RootCause product. An application or program is represented by<A NAME=MARKER-10-341></A> an executable object module<A NAME=MARKER-10-342></A>.
+
  We use the terms <EM><DIV ID=MARKER-2-339></DIV>application</EM> and <EM><DIV ID=MARKER-2-340></DIV>program</EM> interchangeably throughout the RootCause product. An application or program is represented by<DIV ID=MARKER-10-341></DIV> an executable object module<DIV ID=MARKER-10-342></DIV>.
  We use the term <EM><A NAME=MARKER-2-343></A>probe</EM> when describing what RootCause does: RootCause "probes" a running application. The probes created by RootCause do things like tracing, timing, data collection and more. Note that these probes are added only to the in-memory copy of the running application; RootCause does not modify the disk-resident application at all.
+
  We use the term <EM><DIV ID=MARKER-2-343></DIV>probe</EM> when describing what RootCause does: RootCause "probes" a running application. The probes created by RootCause do things like tracing, timing, data collection and more. Note that these probes are added only to the in-memory copy of the running application; RootCause does not modify the disk-resident application at all.
  Each application that is probed by RootCause is assigned a <EM>workspace</EM>. A <A NAME=MARKER-2-344></A>workspace is a directory where RootCause can put all of its important files (including the data collection files) at runtime.
+
  Each application that is probed by RootCause is assigned a <EM>workspace</EM>. A <DIV ID=MARKER-2-344></DIV>workspace is a directory where RootCause can put all of its important files (including the data collection files) at runtime.
 
  Each workspace is created and initialized only once, when RootCause is first invoked on an application. Thereafter, RootCause automatically manipulates the workspace contents, so users can ignore the workspace during normal use. For each probed application, there is one workspace; and for each workspace, there is one application.  
 
  Each workspace is created and initialized only once, when RootCause is first invoked on an application. Thereafter, RootCause automatically manipulates the workspace contents, so users can ignore the workspace during normal use. For each probed application, there is one workspace; and for each workspace, there is one application.  
  We use the term <EM><A NAME=MARKER-2-345></A>log</EM> as a verb to describe Aprobe's low-overhead data recording mechanism. RootCause logs its data into files in the workspace. For best <A NAME=MARKER-2-346></A>performance, workspaces should be on a <A NAME=MARKER-2-347></A>local disk (not remotely mounted).
+
  We use the term <EM><DIV ID=MARKER-2-345></DIV>log</EM> as a verb to describe Aprobe's low-overhead data recording mechanism. RootCause logs its data into files in the workspace. For best <DIV ID=MARKER-2-346></DIV>performance, workspaces should be on a <DIV ID=MARKER-2-347></DIV>local disk (not remotely mounted).
  The RootCause product is invoked <A NAME=MARKER-10-348></A>by the command <CODE>rootcause (see </CODE><A HREF="rcc-12.html#MARKER-9-2008">Chapter 9, "RootCause Command Reference"</A><CODE>)</CODE>.
+
  The RootCause product is invoked <DIV ID=MARKER-10-348></DIV>by the command <CODE>rootcause (see </CODE>[["rcc-12.html#MARKER-9-2008">Chapter 9, "RootCause Command Reference"</DIV><CODE>)</CODE>.
  The RootCause product consists of two major components: the <EM><A NAME=MARKER-2-349></A>RootCause Console</EM> and the <EM><A NAME=MARKER-2-350></A>RootCause Agent</EM>. The RootCause Console component allows you to create probes and examine the trace data generated by the probes. The RootCause Agent is the component that performs the actual runtime tracing and generates the trace data.
+
  The RootCause product consists of two major components: the <EM><DIV ID=MARKER-2-349></DIV>RootCause Console</EM> and the <EM><DIV ID=MARKER-2-350></DIV>RootCause Agent</EM>. The RootCause Console component allows you to create probes and examine the trace data generated by the probes. The RootCause Agent is the component that performs the actual runtime tracing and generates the trace data.
  You can choose to install only the RootCause Agent on a remote computer and then use the RootCause Console's <EM><A NAME=MARKER-2-351></A>deploy</EM> operation to create a workspace for that remote computer. The deployed workspace can then be transferred to the remote computer for use by the RootCause Agent there, and the trace data can be transferred back to the RootCause Console for examination.<A NAME=HEADING6-12></A><A NAME="UID-03terminology_rc.fm-949629"></A><H2> The RootCause Registry</H2>
+
  You can choose to install only the RootCause Agent on a remote computer and then use the RootCause Console's <EM><DIV ID=MARKER-2-351></DIV>deploy</EM> operation to create a workspace for that remote computer. The deployed workspace can then be transferred to the remote computer for use by the RootCause Agent there, and the trace data can be transferred back to the RootCause Console for examination.<DIV ID=HEADING6-12></DIV><DIV ID="UID-03terminology_rc.fm-949629"></DIV><H2> The RootCause Registry</H2>
  The RootCause Agent is enabled on a per-process-group<A NAME=MARKER-10-352></A> basis via an environment variable. When rootcause is "on" in your environment, RootCause will identify and optionally record the creation of every new process <A NAME=MARKER-10-353></A>and subprocess created in that shell or subshells inherited from that shell in the RootCause <A HREF="#MARKER-9-438">log</A>.<A NAME=MARKER-10-354></A>If the executable <A NAME=MARKER-10-355></A> for the process is listed in the RootCause <A HREF="#MARKER-9-453">registry</A>, then RootCause will insert probes into that process to collect data the next time it is launched (when you registered the program, you specified the workspace associated with the executable<A NAME=MARKER-10-356></A> and that workspace contains the probes). If the executable<A NAME=MARKER-10-357></A> does not appear in the registry, then RootCause allows the process to continue undisturbed.<A NAME=HEADING6-14></A><A NAME="UID-03terminology_rc.fm-949631"></A><H2> The RootCause Log</H2>
+
  The RootCause Agent is enabled on a per-process-group<DIV ID=MARKER-10-352></DIV> basis via an environment variable. When rootcause is "on" in your environment, RootCause will identify and optionally record the creation of every new process <DIV ID=MARKER-10-353></DIV>and subprocess created in that shell or subshells inherited from that shell in the RootCause [["#MARKER-9-438">log</DIV>.<DIV ID=MARKER-10-354></DIV>If the executable <DIV ID=MARKER-10-355></DIV> for the process is listed in the RootCause [["#MARKER-9-453">registry</DIV>, then RootCause will insert probes into that process to collect data the next time it is launched (when you registered the program, you specified the workspace associated with the executable<DIV ID=MARKER-10-356></DIV> and that workspace contains the probes). If the executable<DIV ID=MARKER-10-357></DIV> does not appear in the registry, then RootCause allows the process to continue undisturbed.<DIV ID=HEADING6-14></DIV><DIV ID="UID-03terminology_rc.fm-949631"></DIV><H2> The RootCause Log</H2>
  The RootCause log is the central reporting place for RootCause. By default, RootCause records every process that is started while "rootcause_<A NAME=MARKER-10-358></A>on" is in effect. RootCause also writes error messages to this file. The default behavior when starting the RootCause Console <A HREF="#MARKER-9-429">GUI</A> (with the "rootcause open" command) is to view this log, from which you may read error messages, open workspaces, and view trace results. The log is a fixed size, and wraps around to avoid growing too large. The <CODE><A HREF="rcc-12.html#MARKER-9-2075">rootcause log</A></CODE> command manages attributes of this file.<A NAME=HEADING6-16></A><A NAME="UID-03terminology_rc.fm-949445"></A><H2> Aprobe Product</H2>
+
  The RootCause log is the central reporting place for RootCause. By default, RootCause records every process that is started while "rootcause_<DIV ID=MARKER-10-358></DIV>on" is in effect. RootCause also writes error messages to this file. The default behavior when starting the RootCause Console [["#MARKER-9-429">GUI</DIV> (with the "rootcause open" command) is to view this log, from which you may read error messages, open workspaces, and view trace results. The log is a fixed size, and wraps around to avoid growing too large. The <CODE>[["rcc-12.html#MARKER-9-2075">rootcause log</DIV></CODE> command manages attributes of this file.<DIV ID=HEADING6-16></DIV><DIV ID="UID-03terminology_rc.fm-949445"></DIV><H2> Aprobe Product</H2>
 
  Since RootCause is an extension of the Aprobe product, the setup scripts define an environment variable, APROBE, which identifies the RootCause installation directory. $APROBE is used throughout this manual to refer to the installation directory of the Aprobe and RootCause products. This section introduces some Aprobe terminology.
 
  Since RootCause is an extension of the Aprobe product, the setup scripts define an environment variable, APROBE, which identifies the RootCause installation directory. $APROBE is used throughout this manual to refer to the installation directory of the Aprobe and RootCause products. This section introduces some Aprobe terminology.
  A tracing probe created with the RootCause Console is defined in an <A NAME=MARKER-2-359></A>APC (AProbe C) file, which contains ANSI C code interspersed with Aprobe preprocessor directives. The APC file is compiled and linked using your native <A NAME=MARKER-2-360></A>C compiler, and the resulting object code is written to a <A NAME=MARKER-2-361></A>UAL (User Action Library)<A NAME=MARKER-2-362></A> file. It is the UAL file that is used at runtime to dynamically apply your tracing probes.
+
  A tracing probe created with the RootCause Console is defined in an <DIV ID=MARKER-2-359></DIV>APC (AProbe C) file, which contains ANSI C code interspersed with Aprobe preprocessor directives. The APC file is compiled and linked using your native <DIV ID=MARKER-2-360></DIV>C compiler, and the resulting object code is written to a <DIV ID=MARKER-2-361></DIV>UAL (User Action Library)<DIV ID=MARKER-2-362></DIV> file. It is the UAL file that is used at runtime to dynamically apply your tracing probes.
  As your program executes, tracing data is logged (i.e. written) to an APD (AProbe Data) file. Almost always, more than one <A NAME=MARKER-2-363></A>APD file is allocated, and these files are used in a round-robin fashion (the oldest APD file is always overwritten). This set of APD files is referred to as an <EM><A NAME=MARKER-2-364></A>APD ring</EM>. There is a separate control file that is used to manage all the files in the APD ring; this control file is named the APD ring file.  
+
  As your program executes, tracing data is logged (i.e. written) to an APD (AProbe Data) file. Almost always, more than one <DIV ID=MARKER-2-363></DIV>APD file is allocated, and these files are used in a round-robin fashion (the oldest APD file is always overwritten). This set of APD files is referred to as an <EM><DIV ID=MARKER-2-364></DIV>APD ring</EM>. There is a separate control file that is used to manage all the files in the APD ring; this control file is named the APD ring file.  
  APD files are written in a proprietary binary format. The <CODE><A NAME=MARKER-2-365></A>apformat</CODE> command reads APD, UAL and program files and generates readable text.<A NAME=HEADING6-21></A><A NAME="UID-03terminology_rc.fm-959190"></A><H2><A NAME=MARKER-9-366></A>RootCause Data Management</H2>
+
  APD files are written in a proprietary binary format. The <CODE><DIV ID=MARKER-2-365></DIV>apformat</CODE> command reads APD, UAL and program files and generates readable text.<DIV ID=HEADING6-21></DIV><DIV ID="UID-03terminology_rc.fm-959190"></DIV><H2><DIV ID=MARKER-9-366></DIV>RootCause Data Management</H2>
 
  Tracing an application raises a number of questions about managing the data that is recorded.  <OL><LI>
 
  Tracing an application raises a number of questions about managing the data that is recorded.  <OL><LI>
 
How can trace data be recorded quickly?<LI>
 
How can trace data be recorded quickly?<LI>
Line 43: Line 35:
 
How can data recorded by multiple instances of the same program be preserved and organized?<LI>
 
How can data recorded by multiple instances of the same program be preserved and organized?<LI>
 
How can the total amount of data recorded by bounded, to keep from filling up the disk?<LI>
 
How can the total amount of data recorded by bounded, to keep from filling up the disk?<LI>
How can users "<A NAME=MARKER-2-367></A>snapshot"  important data to be kept, while still bounding the total data collected?<LI>
+
How can users "<DIV ID=MARKER-2-367></DIV>snapshot"  important data to be kept, while still bounding the total data collected?<LI>
 
How can users find what they're looking for in the data that is collected?</OL>
 
How can users find what they're looking for in the data that is collected?</OL>
 
  To address these issues, RootCause provides an interface to the Aprobe "log" mechanism which provides powerful and flexible data-recording and formatting capabilities.  Here's how they work.<H3> Recording Data Quickly</H3>
 
  To address these issues, RootCause provides an interface to the Aprobe "log" mechanism which provides powerful and flexible data-recording and formatting capabilities.  Here's how they work.<H3> Recording Data Quickly</H3>
 
  Aprobe logging uses memory-mapped files to record the data. Each process has its own set of data files mapped to distinct memory regions, which avoids bottlenecks and locking problems when several processes are logging data simultaneously. Thread-safety is managed primarily using a lock-free compare-and-swap mechanism, though some locking is still required when switching data files.
 
  Aprobe logging uses memory-mapped files to record the data. Each process has its own set of data files mapped to distinct memory regions, which avoids bottlenecks and locking problems when several processes are logging data simultaneously. Thread-safety is managed primarily using a lock-free compare-and-swap mechanism, though some locking is still required when switching data files.
 
  However, even though the files are memory mapped, the contents  must eventually be written to disk, and this is limited by I/O speeds to the disk device.  For this reason, it is very important that the workspace directory (where RootCause writes the data files) be "local" (directly connected to the machine where the traced program is running) and not accessed across the network (e.g., using NFS).  If you are collecting data from a program running on multiple machines using the same workspace, or have other special requirements, contact OC Systems.<H3> Recording Less Data</H3>
 
  However, even though the files are memory mapped, the contents  must eventually be written to disk, and this is limited by I/O speeds to the disk device.  For this reason, it is very important that the workspace directory (where RootCause writes the data files) be "local" (directly connected to the machine where the traced program is running) and not accessed across the network (e.g., using NFS).  If you are collecting data from a program running on multiple machines using the same workspace, or have other special requirements, contact OC Systems.<H3> Recording Less Data</H3>
  The Aprobe "log" mechanism automatically separates the recording of data from its display and formatting. For example, timestamps are recorded simply as 64-bit values at run-time, then formatted as desired later. String literals and labels are also added as part of formatting. This has the added benefit of being able to format the same data in multiple ways without rerunning the application.<H3><A NAME=MARKER-9-368></A>Data for Multiple Processes</H3>
+
  The Aprobe "log" mechanism automatically separates the recording of data from its display and formatting. For example, timestamps are recorded simply as 64-bit values at run-time, then formatted as desired later. String literals and labels are also added as part of formatting. This has the added benefit of being able to format the same data in multiple ways without rerunning the application.<H3><DIV ID=MARKER-9-368></DIV>Data for Multiple Processes</H3>
  The data associated with each process is saved in a "<A NAME=MARKER-2-369></A><A HREF="#MARKER-9-444">Process Data Set</A>", or "<A HREF="#MARKER-9-393">APD ring</A>", a directory identified by the <A HREF="#MARKER-9-443">PID</A> of that process. The user specifies how many of these should be saved, and when that limit is reached, the oldest Process Data Set is deleted when tracing of a new process is started.<H3><A NAME=MARKER-9-370></A>Bounding Total Data</H3>
+
  The data associated with each process is saved in a "<DIV ID=MARKER-2-369></DIV>[["#MARKER-9-444">Process Data Set</DIV>", or "[["#MARKER-9-393">APD ring</DIV>", a directory identified by the [["#MARKER-9-443">PID</DIV> of that process. The user specifies how many of these should be saved, and when that limit is reached, the oldest Process Data Set is deleted when tracing of a new process is started.<H3><DIV ID=MARKER-9-370></DIV>Bounding Total Data</H3>
  As mentioned above, the user specifies how many processes' data are to be saved. In addition, the amount of data saved for each process is also highly configurable. The data for each process is treated as a multi-file circular buffer, or "<A HREF="#MARKER-9-393">APD ring</A>". Each file is called an "<A HREF="#MARKER-9-392">APD file</A>" because of its suffix, ".apd". At the Aprobe level the user may specify the size of each file, the number of files in each ring; and the number of snapshot files saved.  RootCause makes this a bit easier by offering the following parameters in the <A HREF="rcc-11.html#MARKER-9-1463">RootCause Options Dialog</A>:<UL><LI>
+
  As mentioned above, the user specifies how many processes' data are to be saved. In addition, the amount of data saved for each process is also highly configurable. The data for each process is treated as a multi-file circular buffer, or "[["#MARKER-9-393">APD ring</DIV>". Each file is called an "[["#MARKER-9-392">APD file</DIV>" because of its suffix, ".apd". At the Aprobe level the user may specify the size of each file, the number of files in each ring; and the number of snapshot files saved.  RootCause makes this a bit easier by offering the following parameters in the [["rcc-11.html#MARKER-9-1463">RootCause Options Dialog</DIV>:<UL><LI>
<A HREF="rcc-11.html#MARKER-9-1466">Keep logged data for N previous processes</A>
+
[["rcc-11.html#MARKER-9-1466">Keep logged data for N previous processes</DIV>
 
This specifies the number of Process Data Sets to keep, as described above.<LI>
 
This specifies the number of Process Data Sets to keep, as described above.<LI>
<A HREF="rcc-11.html#MARKER-9-1468">Data File Size</A> (bytes)  
+
[["rcc-11.html#MARKER-9-1468">Data File Size</DIV> (bytes)  
This specifies the size of each "<A HREF="#MARKER-9-392">APD file</A>".<LI>
+
This specifies the size of each "[["#MARKER-9-392">APD file</DIV>".<LI>
<A HREF="rcc-11.html#MARKER-9-1470">Wraparound data logging wraps at N</A> (bytes)
+
[["rcc-11.html#MARKER-9-1470">Wraparound data logging wraps at N</DIV> (bytes)
 
This specifies the total "wraparound buffer" size, which corresponds to the number of individual data files that are kept for each process before the oldest start being deleted.<LI>
 
This specifies the total "wraparound buffer" size, which corresponds to the number of individual data files that are kept for each process before the oldest start being deleted.<LI>
<A HREF="rcc-11.html#MARKER-9-1472">Total logged data limit per process</A> (bytes)
+
[["rcc-11.html#MARKER-9-1472">Total logged data limit per process</DIV> (bytes)
Files may be preserved even when they might otherwise be deleted, using a <A HREF="#MARKER-9-467">snapshot</A> mechanism described below. This parameter allows the user to set a hard upper bound on the total data per process, even when many snapshots are taken.</UL><H3><A NAME=MARKER-9-371></A>Data Snapshots</H3>
+
Files may be preserved even when they might otherwise be deleted, using a [["#MARKER-9-467">snapshot</DIV> mechanism described below. This parameter allows the user to set a hard upper bound on the total data per process, even when many snapshots are taken.</UL><H3><DIV ID=MARKER-9-371></DIV>Data Snapshots</H3>
  RootCause provides a mechanism for a "<A NAME=MARKER-2-372></A>snapshot" to be taken programatically. This does not copy the data, but rather marks it as "<A NAME=MARKER-2-373></A>preserved" so it is not deleted by the normal wraparound mechanism described above.  RootCause allows a user to identify points during program execution at which a snapshot of the data is to be taken. At the Aprobe level, users may specify arbitrarily complex conditions under which a snapshot is taken.  This mechanism is used by the <EM><A HREF="rcc-11.html#MARKER-9-1344">java_exceptions</A></EM> predefined UAL, which causes a snapshot to be taken when selected Java runtime exceptions occur.<H3> Data Indexing</H3>
+
  RootCause provides a mechanism for a "<DIV ID=MARKER-2-372></DIV>snapshot" to be taken programatically. This does not copy the data, but rather marks it as "<DIV ID=MARKER-2-373></DIV>preserved" so it is not deleted by the normal wraparound mechanism described above.  RootCause allows a user to identify points during program execution at which a snapshot of the data is to be taken. At the Aprobe level, users may specify arbitrarily complex conditions under which a snapshot is taken.  This mechanism is used by the <EM>[["rcc-11.html#MARKER-9-1344">java_exceptions</DIV></EM> predefined UAL, which causes a snapshot to be taken when selected Java runtime exceptions occur.<H3> Data Indexing</H3>
 
  RootCause provides four levels of control in accessing the data: <UL><LI>
 
  RootCause provides four levels of control in accessing the data: <UL><LI>
the <A HREF="#MARKER-9-444">Process Data Set</A>;<LI>
+
the [["#MARKER-9-444">Process Data Set</DIV>;<LI>
individual <A HREF="#MARKER-9-407">Data File</A>s;<LI>
+
individual [["#MARKER-9-407">Data File</DIV>s;<LI>
special events in the <A HREF="rcc-11.html#MARKER-9-1680">Trace Index Dialog</A>; and<LI>
+
special events in the [["rcc-11.html#MARKER-9-1680">Trace Index Dialog</DIV>; and<LI>
individual events in the <A HREF="rcc-11.html#MARKER-9-1725">Trace Display</A>.</UL>
+
individual events in the [["rcc-11.html#MARKER-9-1725">Trace Display</DIV>.</UL>
  Data is generally selected via the Trace Index Dialog, by double-clicking on a Process Data Set in the Workspace Tree, or by clicking the Index button. Index entries are shown for the "Last Data Recorded", and for any snapshots taken. In addition, any exceptions detected by the <A HREF="rcc-11.html#MARKER-9-1342">exceptions</A> and <A HREF="rcc-11.html#MARKER-9-1344">java_exceptions</A> predefined UALs may be shown in the Index. (We anticipate additional kinds of events being available through the Trace Index in future versions.) One or more events may be selected in the Index, and a Trace Display opened on the files surrounding that event. You can control the size of the context around the event via the <A HREF="rcc-11.html#MARKER-9-1463">RootCause Options Dialog</A>.   
+
  Data is generally selected via the Trace Index Dialog, by double-clicking on a Process Data Set in the Workspace Tree, or by clicking the Index button. Index entries are shown for the "Last Data Recorded", and for any snapshots taken. In addition, any exceptions detected by the [["rcc-11.html#MARKER-9-1342">exceptions</DIV> and [["rcc-11.html#MARKER-9-1344">java_exceptions</DIV> predefined UALs may be shown in the Index. (We anticipate additional kinds of events being available through the Trace Index in future versions.) One or more events may be selected in the Index, and a Trace Display opened on the files surrounding that event. You can control the size of the context around the event via the [["rcc-11.html#MARKER-9-1463">RootCause Options Dialog</DIV>.   
 
  From the Trace Index Dialog you can specify what Data Files the Index is to be generated from, and you can add data files from additional processes, and even additional workspaces.    Using the Examine button in the Workspace Browser you can directly specify which Data Files are to be viewed, without going through the Index.  
 
  From the Trace Index Dialog you can specify what Data Files the Index is to be generated from, and you can add data files from additional processes, and even additional workspaces.    Using the Examine button in the Workspace Browser you can directly specify which Data Files are to be viewed, without going through the Index.  
  Once you have selected which data files to view, you can view all the data collected in the <A HREF="rcc-11.html#MARKER-9-1725">Trace Display</A>. This shows all the events ordered by thread or by-time, and organized as a call tree within each thread. One can do textual searches through this display for specific events.  Data may be added or removed from a Trace Display at the Data File level, and the RootCause Log may be merged with it as well to show the interaction of multiple processes.<A NAME=HEADING6-58></A><A NAME="UID-03terminology_rc.fm-964487"></A><H2><A NAME=MARKER-9-374></A>RootCause Overhead Management</H2>
+
  Once you have selected which data files to view, you can view all the data collected in the [["rcc-11.html#MARKER-9-1725">Trace Display</DIV>. This shows all the events ordered by thread or by-time, and organized as a call tree within each thread. One can do textual searches through this display for specific events.  Data may be added or removed from a Trace Display at the Data File level, and the RootCause Log may be merged with it as well to show the interaction of multiple processes.<DIV ID=HEADING6-58></DIV><DIV ID="UID-03terminology_rc.fm-964487"></DIV><H2><DIV ID=MARKER-9-374></DIV>RootCause Overhead Management</H2>
  After a program has started, the <A NAME=MARKER-2-375></A>overhead that a RootCause trace adds is proportional to the number of traced <A NAME=MARKER-10-376></A>function calls made by the program as it's running. Often it's the case that the most-frequently-called <A NAME=MARKER-10-377></A>functions are of little interest in the trace, and yet are introducing the most overhead.
+
  After a program has started, the <DIV ID=MARKER-2-375></DIV>overhead that a RootCause trace adds is proportional to the number of traced <DIV ID=MARKER-10-376></DIV>function calls made by the program as it's running. Often it's the case that the most-frequently-called <DIV ID=MARKER-10-377></DIV>functions are of little interest in the trace, and yet are introducing the most overhead.
 
  RootCause provides several mechanisms to control tracing overhead, and focus the tracing to the time when it will provide the most information.<H3> Load Shedding</H3>
 
  RootCause provides several mechanisms to control tracing overhead, and focus the tracing to the time when it will provide the most information.<H3> Load Shedding</H3>
  RootCause manages tracing overhead by <A NAME=MARKER-2-378></A><A HREF="#MARKER-9-433">load shedding</A>, a process by which tracing is disabled based on its estimated tracing overhead. This is done automatically by default, based on a heuristic analysis of CPU time used by traced functions.  You can disable load shedding, or adjust the heuristics, with the <A HREF="rcc-11.html#MARKER-9-1646">Global Trace Options Dialog</A> opened by clicking the Options button at the bottom of the <A HREF="rcc-11.html#MARKER-9-1531">Trace Setup Dialog</A>.
+
  RootCause manages tracing overhead by <DIV ID=MARKER-2-378></DIV>[["#MARKER-9-433">load shedding</DIV>, a process by which tracing is disabled based on its estimated tracing overhead. This is done automatically by default, based on a heuristic analysis of CPU time used by traced functions.  You can disable load shedding, or adjust the heuristics, with the [["rcc-11.html#MARKER-9-1646">Global Trace Options Dialog</DIV> opened by clicking the Options button at the bottom of the [["rcc-11.html#MARKER-9-1531">Trace Setup Dialog</DIV>.
  When viewing the data, if there are any functions that were load shed, a LOAD_SHED node will appear in the <A HREF="rcc-11.html#MARKER-9-1797">Event Trace Tree</A>, from which you can open a <A HREF="rcc-11.html#MARKER-9-1857">LOAD_SHED Table</A> to see exactly which functions were disabled and when.  
+
  When viewing the data, if there are any functions that were load shed, a LOAD_SHED node will appear in the [["rcc-11.html#MARKER-9-1797">Event Trace Tree</DIV>, from which you can open a [["rcc-11.html#MARKER-9-1857">LOAD_SHED Table</DIV> to see exactly which functions were disabled and when.  
 
  Using this table you may change the disposition of some or all of the functions during the next run. Usually you will simply want to select all the functions listed and change them to "Don't Trace" so they aren't traced at all in subsequent runs. However, occasionally a function will be disabled that is important to trace, and in this case you may mark that function as "Don't Shed" to force it to be traced regardless of the overhead.
 
  Using this table you may change the disposition of some or all of the functions during the next run. Usually you will simply want to select all the functions listed and change them to "Don't Trace" so they aren't traced at all in subsequent runs. However, occasionally a function will be disabled that is important to trace, and in this case you may mark that function as "Don't Shed" to force it to be traced regardless of the overhead.
  Traced <A NAME=MARKER-10-379></A>functions designated as "Don't Shed" are marked with a red dot in the <A HREF="rcc-11.html#MARKER-9-1531">Trace Setup Dialog</A>. You can enable or disable load shedding on a specific <A NAME=MARKER-10-380></A>function using the <A HREF="rcc-11.html#MARKER-9-1545">Trace Setup Popup Menu</A>.<H3> Enable/Disable Tracing</H3>
+
  Traced <DIV ID=MARKER-10-379></DIV>functions designated as "Don't Shed" are marked with a red dot in the [["rcc-11.html#MARKER-9-1531">Trace Setup Dialog</DIV>. You can enable or disable load shedding on a specific <DIV ID=MARKER-10-380></DIV>function using the [["rcc-11.html#MARKER-9-1545">Trace Setup Popup Menu</DIV>.<H3> Enable/Disable Tracing</H3>
  RootCause provides a mechanism to <A NAME=MARKER-2-381></A>disable tracing at the start of the program, (or any other point) and enable it upon entry to (or exit from) a <A NAME=MARKER-10-382></A>function executed later on. This is conceptually a global switch that can be turned on and off during program execution. So, for example, if your program does a lot of processing during initialization, but you're not interested in tracing that, you can:
+
  RootCause provides a mechanism to <DIV ID=MARKER-2-381></DIV>disable tracing at the start of the program, (or any other point) and enable it upon entry to (or exit from) a <DIV ID=MARKER-10-382></DIV>function executed later on. This is conceptually a global switch that can be turned on and off during program execution. So, for example, if your program does a lot of processing during initialization, but you're not interested in tracing that, you can:
  Select the Program node in the <A HREF="rcc-11.html#MARKER-9-1531">Trace Setup Dialog</A>, and using the <A HREF="rcc-11.html#MARKER-9-1589">Probes Pane</A> configure a Probe On Program Entry to Disable Tracing.  
+
  Select the Program node in the [["rcc-11.html#MARKER-9-1531">Trace Setup Dialog</DIV>, and using the [["rcc-11.html#MARKER-9-1589">Probes Pane</DIV> configure a Probe On Program Entry to Disable Tracing.  
  Then you can select a <A NAME=MARKER-10-383></A>function that is called at the start of the processing you want to trace and create a Probe On Entry to Enable Tracing.
+
  Then you can select a <DIV ID=MARKER-10-383></DIV>function that is called at the start of the processing you want to trace and create a Probe On Entry to Enable Tracing.
  As with most features available through the RootCause console, you can get even more control and power with a custom probe which directly calls the Aprobe runtime functions <CODE><A NAME=MARKER-9-384></A>ap_RootCauseTraceEnable()</CODE> and <CODE><A NAME=MARKER-9-385></A>ap_RootCauseTraceDisable()</CODE> to enable and disable tracing only if certain conditions or data values are detected in the program. Contact support@ocsystems.com for more information on writing custom probes.<A NAME=HEADING6-71></A><A NAME="UID-03terminology_rc.fm-949782"></A>
+
  As with most features available through the RootCause console, you can get even more control and power with a custom probe which directly calls the Aprobe runtime functions <CODE><DIV ID=MARKER-9-384></DIV>ap_RootCauseTraceEnable()</CODE> and <CODE><DIV ID=MARKER-9-385></DIV>ap_RootCauseTraceDisable()</CODE> to enable and disable tracing only if certain conditions or data values are detected in the program. Contact support@ocsystems.com for more information on writing custom probes.<DIV ID=HEADING6-71></DIV><DIV ID="UID-03terminology_rc.fm-949782"></DIV>
 
<!--  <H2>
 
<!--  <H2>
<A NAME=MARKER-9-386></A>
+
<DIV ID=MARKER-9-386></DIV>
<A NAME=MARKER-2-387></A>
+
<DIV ID=MARKER-2-387></DIV>
 
Glossary</H2>  -->
 
Glossary</H2>  -->
 
== Glossary ==
 
== Glossary ==
  Discussion of RootCause and Aprobe requires the use of terms that are either specific to the products or assigned a special meaning in the context of the product.  Many of these terms are also defined above and elsewhere in this guide, but are listed here for easy reference. <H4><A NAME=MARKER-2-388></A><A NAME=MARKER-9-389></A>ADI file</H4>
+
  Discussion of RootCause and Aprobe requires the use of terms that are either specific to the products or assigned a special meaning in the context of the product.  Many of these terms are also defined above and elsewhere in this guide, but are listed here for easy reference. <H4><DIV ID=MARKER-2-388></DIV><DIV ID=MARKER-9-389></DIV>ADI file</H4>
  Aprobe Debug Information file, which contains symbol and line information extracted from a <A HREF="#MARKER-9-440">module</A> for use by <A HREF="#MARKER-9-418">deploy</A>ed probes on <A HREF="#MARKER-9-401">application</A>s which have been <A HREF="#MARKER-9-468">stripped</A> of debug and symbol information.<H4><A NAME=MARKER-9-390></A><A NAME=MARKER-2-391></A>APC</H4>
+
  Aprobe Debug Information file, which contains symbol and line information extracted from a [["#MARKER-9-440">module</DIV> for use by [["#MARKER-9-418">deploy</DIV>ed probes on [["#MARKER-9-401">application</DIV>s which have been [["#MARKER-9-468">stripped</DIV> of debug and symbol information.<H4><DIV ID=MARKER-9-390></DIV><DIV ID=MARKER-2-391></DIV>APC</H4>
  "AProbe C" language, a superset of the C programming language, used to define <A HREF="#MARKER-9-447">probes</A>. An APC file is a text file containing APC source code.  APC files are compiled into a <A HREF="#MARKER-9-479">UAL</A> file using the <CODE>apc</CODE> command.<H4><A NAME=MARKER-9-392></A>APD file</H4>
+
  "AProbe C" language, a superset of the C programming language, used to define [["#MARKER-9-447">probes</DIV>. An APC file is a text file containing APC source code.  APC files are compiled into a [["#MARKER-9-479">UAL</DIV> file using the <CODE>apc</CODE> command.<H4><DIV ID=MARKER-9-392></DIV>APD file</H4>
  "AProbe Data" file, containing information written in a compressed format by the <A HREF="#MARKER-9-436">log</A> command. These files are <A HREF="#MARKER-9-427">format</A>ted (generally converted to text) by the <CODE>apformat</CODE> command.<H4><A NAME=MARKER-9-393></A><A NAME=MARKER-2-394></A>APD ring</H4>
+
  "AProbe Data" file, containing information written in a compressed format by the [["#MARKER-9-436">log</DIV> command. These files are [["#MARKER-9-427">format</DIV>ted (generally converted to text) by the <CODE>apformat</CODE> command.<H4><DIV ID=MARKER-9-393></DIV><DIV ID=MARKER-2-394></DIV>APD ring</H4>
  A set of <A HREF="#MARKER-9-392">APD file</A>s corresponding to a single execution of an <A HREF="#MARKER-9-401">application</A>. There is always one persistent file, "name.apd", and one or more ring files "name-1.apd", "name-2.apd", etc., grouped together in a directory having the same name as the persistent file, but with a suffix corresponding to the <A NAME=MARKER-2-395></A>PID of the traced process, e.g., "name.apd.12345".<H4><A NAME=MARKER-9-396></A><A NAME=MARKER-2-397></A>actions</H4>
+
  A set of [["#MARKER-9-392">APD file</DIV>s corresponding to a single execution of an [["#MARKER-9-401">application</DIV>. There is always one persistent file, "name.apd", and one or more ring files "name-1.apd", "name-2.apd", etc., grouped together in a directory having the same name as the persistent file, but with a suffix corresponding to the <DIV ID=MARKER-2-395></DIV>PID of the traced process, e.g., "name.apd.12345".<H4><DIV ID=MARKER-9-396></DIV><DIV ID=MARKER-2-397></DIV>actions</H4>
  Operations, generally gathering or counting data, that are applied at a certain point in a program. Actions, combined with the points where they are applied, make up <A HREF="#MARKER-9-447">probes</A>.<H4><A NAME=MARKER-2-398></A><A NAME=MARKER-9-399></A>agent</H4>
+
  Operations, generally gathering or counting data, that are applied at a certain point in a program. Actions, combined with the points where they are applied, make up [["#MARKER-9-447">probes</DIV>.<H4><DIV ID=MARKER-2-398></DIV><DIV ID=MARKER-9-399></DIV>agent</H4>
  The part of the RootCause product which actually applies and enables the <A HREF="#MARKER-9-447">probes</A>, also known as the Aprobe runtime.<H4> apc</H4>
+
  The part of the RootCause product which actually applies and enables the [["#MARKER-9-447">probes</DIV>, also known as the Aprobe runtime.<H4> apc</H4>
  The Aprobe command which compiles an <A HREF="#MARKER-9-390">APC</A> file into a <A HREF="#MARKER-9-479">UAL</A>.<H4><A NAME=MARKER-9-400></A>apformat</H4>
+
  The Aprobe command which compiles an [["#MARKER-9-390">APC</DIV> file into a [["#MARKER-9-479">UAL</DIV>.<H4><DIV ID=MARKER-9-400></DIV>apformat</H4>
  The Aprobe command which <A HREF="#MARKER-9-427">format</A>s (generates text from) <A HREF="#MARKER-9-392">APD file</A>s.<H4><A NAME=MARKER-9-401></A><A NAME=MARKER-2-402></A>application</H4>
+
  The Aprobe command which [["#MARKER-9-427">format</DIV>s (generates text from) [["#MARKER-9-392">APD file</DIV>s.<H4><DIV ID=MARKER-9-401></DIV><DIV ID=MARKER-2-402></DIV>application</H4>
  An executable or JRE together with all the classes or shared libraries that it loads, also known as a <A HREF="#MARKER-9-449">program</A>.<H4> aprobe</H4>
+
  An executable or JRE together with all the classes or shared libraries that it loads, also known as a [["#MARKER-9-449">program</DIV>.<H4> aprobe</H4>
  The Aprobe command which actually applies <A HREF="#MARKER-9-447">probes</A> to a <A HREF="#MARKER-9-449">program</A>.<H4><A NAME=MARKER-2-403></A><A NAME=MARKER-9-404></A>collect</H4>
+
  The Aprobe command which actually applies [["#MARKER-9-447">probes</DIV> to a [["#MARKER-9-449">program</DIV>.<H4><DIV ID=MARKER-2-403></DIV><DIV ID=MARKER-9-404></DIV>collect</H4>
  To identify the <A HREF="#MARKER-9-392">APD file</A>s from one or more <A HREF="#MARKER-9-482">workspace</A>s and compress them, along with other necessary information, into a single file with the suffix <CODE><A NAME=MARKER-2-405></A>.clct</CODE>, usually in preparation for moving from a remote machine back to a local <A HREF="#MARKER-9-406">Console</A> installation for analysis.<H4><A NAME=MARKER-9-406></A>Console</H4>
+
  To identify the [["#MARKER-9-392">APD file</DIV>s from one or more [["#MARKER-9-482">workspace</DIV>s and compress them, along with other necessary information, into a single file with the suffix <CODE><DIV ID=MARKER-2-405></DIV>.clct</CODE>, usually in preparation for moving from a remote machine back to a local [["#MARKER-9-406">Console</DIV> installation for analysis.<H4><DIV ID=MARKER-9-406></DIV>Console</H4>
  The RootCause <A HREF="#MARKER-9-429">GUI</A> and supporting Aprobe tools (e.g., apc, apformat), through which all development and analysis of traces is performed.<H4><A NAME=MARKER-9-407></A>Data File</H4>
+
  The RootCause [["#MARKER-9-429">GUI</DIV> and supporting Aprobe tools (e.g., apc, apformat), through which all development and analysis of traces is performed.<H4><DIV ID=MARKER-9-407></DIV>Data File</H4>
  A file containing RootCause data logged when a process is run under rootcause; another name for an <A HREF="#MARKER-9-392">APD file</A>.<H4><A NAME=MARKER-10-408></A><A NAME=MARKER-2-409></A><A NAME=MARKER-9-410></A>decollect</H4>
+
  A file containing RootCause data logged when a process is run under rootcause; another name for an [["#MARKER-9-392">APD file</DIV>.<H4><DIV ID=MARKER-10-408></DIV><DIV ID=MARKER-2-409></DIV><DIV ID=MARKER-9-410></DIV>decollect</H4>
  To expand a <CODE>.clct</CODE> file back into a directory with suffix <CODE><A NAME=MARKER-2-411></A>.dclct</CODE> for analysis by the RootCause <A HREF="#MARKER-9-406">Console</A>.<H4><A NAME=MARKER-2-412></A><A NAME=MARKER-9-413></A>decollection</H4>
+
  To expand a <CODE>.clct</CODE> file back into a directory with suffix <CODE><DIV ID=MARKER-2-411></DIV>.dclct</CODE> for analysis by the RootCause [["#MARKER-9-406">Console</DIV>.<H4><DIV ID=MARKER-2-412></DIV><DIV ID=MARKER-9-413></DIV>decollection</H4>
  the <CODE>.dclct</CODE> directory tree created by the <A HREF="#MARKER-9-410">decollect</A> operation.<H4><A NAME=MARKER-10-414></A><A NAME=MARKER-2-415></A><A NAME=MARKER-9-416></A>dynamic module</H4>
+
  the <CODE>.dclct</CODE> directory tree created by the [["#MARKER-9-410">decollect</DIV> operation.<H4><DIV ID=MARKER-10-414></DIV><DIV ID=MARKER-2-415></DIV><DIV ID=MARKER-9-416></DIV>dynamic module</H4>
  A <A HREF="#MARKER-9-461">shared library</A> that is explicitly loaded by a program after execution has begun. See <A HREF="rcc-11.html#MARKER-9-1380">"Add Dynamic Module"</A> and <A HREF="rcc-13.html#MARKER-9-2183">"Dynamically Loaded Libraries"</A>.<H4><A NAME=MARKER-10-417></A><A NAME=MARKER-9-418></A><A NAME=MARKER-2-419></A>deploy</H4>
+
  A [["#MARKER-9-461">shared library</DIV> that is explicitly loaded by a program after execution has begun. See [["rcc-11.html#MARKER-9-1380">"Add Dynamic Module"</DIV> and [["rcc-13.html#MARKER-9-2183">"Dynamically Loaded Libraries"</DIV>.<H4><DIV ID=MARKER-10-417></DIV><DIV ID=MARKER-9-418></DIV><DIV ID=MARKER-2-419></DIV>deploy</H4>
  To compress the information in a <A HREF="#MARKER-9-482">workspace</A> into a file with a <CODE><A NAME=MARKER-2-420></A>.dply</CODE> suffix, and transfer that file to a <A HREF="#MARKER-9-456">remote</A> computer for tracing an <A HREF="#MARKER-9-401">application</A> there.<H4><A NAME=MARKER-9-421></A>event</H4>
+
  To compress the information in a [["#MARKER-9-482">workspace</DIV> into a file with a <CODE><DIV ID=MARKER-2-420></DIV>.dply</CODE> suffix, and transfer that file to a [["#MARKER-9-456">remote</DIV> computer for tracing an [["#MARKER-9-401">application</DIV> there.<H4><DIV ID=MARKER-9-421></DIV>event</H4>
  any of a number of specially-tagged data items <A HREF="#MARKER-9-436">log</A>ged by RootCause and shown in the <A NAME=MARKER-2-422></A><A HREF="rcc-11.html#MARKER-9-1680">Trace Index Dialog</A> or  <EM><A NAME=MARKER-2-423></A><A HREF="rcc-11.html#MARKER-9-1797">Event Trace Tree</A></EM>, or printed by the <A NAME=MARKER-2-424></A>rootcause format command.<H4><A NAME=MARKER-9-425></A><A NAME=MARKER-2-426></A>executable</H4>
+
  any of a number of specially-tagged data items [["#MARKER-9-436">log</DIV>ged by RootCause and shown in the <DIV ID=MARKER-2-422></DIV>[["rcc-11.html#MARKER-9-1680">Trace Index Dialog</DIV> or  <EM><DIV ID=MARKER-2-423></DIV>[["rcc-11.html#MARKER-9-1797">Event Trace Tree</DIV></EM>, or printed by the <DIV ID=MARKER-2-424></DIV>rootcause format command.<H4><DIV ID=MARKER-9-425></DIV><DIV ID=MARKER-2-426></DIV>executable</H4>
  A binary object file containing the entry point of an <A HREF="#MARKER-9-401">application</A> which may be run directly; this is distinct from a <A HREF="#MARKER-9-461">shared library</A>, which must be loaded in the context of a running executable.<H4><A NAME=MARKER-9-427></A><A NAME=MARKER-2-428></A>format</H4>
+
  A binary object file containing the entry point of an [["#MARKER-9-401">application</DIV> which may be run directly; this is distinct from a [["#MARKER-9-461">shared library</DIV>, which must be loaded in the context of a running executable.<H4><DIV ID=MARKER-9-427></DIV><DIV ID=MARKER-2-428></DIV>format</H4>
  To process the contents of <A HREF="#MARKER-9-392">APD file</A>s into text, or other meaningful output, using the Aprobe <CODE>apformat</CODE> command. Data collected by RootCause is generally formatted into <A HREF="#MARKER-9-486">XML</A> before being read into the RootCause Console.<H4><A NAME=MARKER-9-429></A>GUI</H4>
+
  To process the contents of [["#MARKER-9-392">APD file</DIV>s into text, or other meaningful output, using the Aprobe <CODE>apformat</CODE> command. Data collected by RootCause is generally formatted into [["#MARKER-9-486">XML</DIV> before being read into the RootCause Console.<H4><DIV ID=MARKER-9-429></DIV>GUI</H4>
  The Graphical User Interface portion of the RootCause <A HREF="#MARKER-9-406">Console</A>. See <A HREF="rcc-11.html#MARKER-9-1320">Chapter 8, "RootCause GUI Reference"</A>.<H4><A NAME=MARKER-2-430></A><A NAME=MARKER-9-431></A>JRE</H4>
+
  The Graphical User Interface portion of the RootCause [["#MARKER-9-406">Console</DIV>. See [["rcc-11.html#MARKER-9-1320">Chapter 8, "RootCause GUI Reference"</DIV>.<H4><DIV ID=MARKER-2-430></DIV><DIV ID=MARKER-9-431></DIV>JRE</H4>
  "Java Runtime Environment", the environment which directly executes Java applications. The RootCause <A HREF="#MARKER-9-429">GUI</A> is implemented in Java and so ships with a JRE.  RootCause for Java allows you to define Java traces for supported JREs. <H4><A NAME=MARKER-9-432></A>JVM</H4>
+
  "Java Runtime Environment", the environment which directly executes Java applications. The RootCause [["#MARKER-9-429">GUI</DIV> is implemented in Java and so ships with a JRE.  RootCause for Java allows you to define Java traces for supported JREs. <H4><DIV ID=MARKER-9-432></DIV>JVM</H4>
  "Java Virtual Machine", the portion of an application (e.g., java, Netscape) which loads and executes Java class files and applets. This is generally implemented as a single library within the <A HREF="#MARKER-9-431">JRE</A>. <H4><A NAME=MARKER-9-433></A>load shedding</H4>
+
  "Java Virtual Machine", the portion of an application (e.g., java, Netscape) which loads and executes Java class files and applets. This is generally implemented as a single library within the [["#MARKER-9-431">JRE</DIV>. <H4><DIV ID=MARKER-9-433></DIV>load shedding</H4>
  The process of dynamically disabling tracing of functions or methods based on the tracing overhead they introduce into the program.  This mechanism prevents tracing from slowing down a program too much, and automatically creates a list of methods to be eliminated from subsequent traces.<H4><A NAME=MARKER-9-434></A><A NAME=MARKER-2-435></A>local</H4>
+
  The process of dynamically disabling tracing of functions or methods based on the tracing overhead they introduce into the program.  This mechanism prevents tracing from slowing down a program too much, and automatically creates a list of methods to be eliminated from subsequent traces.<H4><DIV ID=MARKER-9-434></DIV><DIV ID=MARKER-2-435></DIV>local</H4>
  Referring to the machine and execution environment in which the RootCause <A HREF="#MARKER-9-406">Console</A> is installed, where <A HREF="#MARKER-9-473">traces</A>, and perhaps the traced <A HREF="#MARKER-9-401">application</A> itself, are developed; the opposite of <A HREF="#MARKER-9-456">remote</A>, where the <A HREF="#MARKER-9-399">agent</A> is installed.<H4><A NAME=MARKER-9-436></A><A NAME=MARKER-2-437></A>log</H4>
+
  Referring to the machine and execution environment in which the RootCause [["#MARKER-9-406">Console</DIV> is installed, where [["#MARKER-9-473">traces</DIV>, and perhaps the traced [["#MARKER-9-401">application</DIV> itself, are developed; the opposite of [["#MARKER-9-456">remote</DIV>, where the [["#MARKER-9-399">agent</DIV> is installed.<H4><DIV ID=MARKER-9-436></DIV><DIV ID=MARKER-2-437></DIV>log</H4>
<EM>verb</EM>: the recording of data by RootCause info an APD file. <H4><A NAME=MARKER-9-438></A>log</H4>
+
<EM>verb</EM>: the recording of data by RootCause info an APD file. <H4><DIV ID=MARKER-9-438></DIV>log</H4>
<EM>noun</EM>: the <A NAME=MARKER-2-439></A>RootCause Log, in which information about processes is recorded. <H4><A NAME=MARKER-9-440></A><A NAME=MARKER-2-441></A>module</H4>
+
<EM>noun</EM>: the <DIV ID=MARKER-2-439></DIV>RootCause Log, in which information about processes is recorded. <H4><DIV ID=MARKER-9-440></DIV><DIV ID=MARKER-2-441></DIV>module</H4>
  A loadable object module; an <A HREF="#MARKER-9-425">executable</A> or <A HREF="#MARKER-9-461">shared library</A>.  In RootCause for Java, a class and all its supporting classes are managed as a module as well.<H4><A NAME=MARKER-2-442></A><A NAME=MARKER-9-443></A>PID</H4>
+
  A loadable object module; an [["#MARKER-9-425">executable</DIV> or [["#MARKER-9-461">shared library</DIV>.  In RootCause for Java, a class and all its supporting classes are managed as a module as well.<H4><DIV ID=MARKER-2-442></DIV><DIV ID=MARKER-9-443></DIV>PID</H4>
  Process ID, the number assigned to each process on the system, and used to uniquely identify each <A HREF="#MARKER-9-393">APD ring</A> generated by <A HREF="#MARKER-9-475">tracing</A> that process.<H4><A NAME=MARKER-9-444></A>Process Data Set</H4>
+
  Process ID, the number assigned to each process on the system, and used to uniquely identify each [["#MARKER-9-393">APD ring</DIV> generated by [["#MARKER-9-475">tracing</DIV> that process.<H4><DIV ID=MARKER-9-444></DIV>Process Data Set</H4>
  The group of <A HREF="#MARKER-9-407">Data File</A>s associated with a single process (<A HREF="#MARKER-9-443">PID</A>); another name for an <A HREF="#MARKER-9-393">APD ring</A>.<H4><A NAME=MARKER-9-445></A><A NAME=MARKER-2-446></A>predefined UAL</H4>
+
  The group of [["#MARKER-9-407">Data File</DIV>s associated with a single process ([["#MARKER-9-443">PID</DIV>); another name for an [["#MARKER-9-393">APD ring</DIV>.<H4><DIV ID=MARKER-9-445></DIV><DIV ID=MARKER-2-446></DIV>predefined UAL</H4>
  A ready-to-use <A HREF="#MARKER-9-479">UAL</A> which may be applied to any application to perform a specific function. Some are provided with RootCause, additional ones with Aprobe, and more can be developed by users.<H4><A NAME=MARKER-9-447></A><A NAME=MARKER-2-448></A>probes</H4>
+
  A ready-to-use [["#MARKER-9-479">UAL</DIV> which may be applied to any application to perform a specific function. Some are provided with RootCause, additional ones with Aprobe, and more can be developed by users.<H4><DIV ID=MARKER-9-447></DIV><DIV ID=MARKER-2-448></DIV>probes</H4>
  Actions to be performed at specific points in a <A HREF="#MARKER-9-449">program</A>. These <A HREF="#MARKER-9-396">actions</A> are applied at the probe points in memory, without modifying the program files on disk.<H4><A NAME=MARKER-9-449></A><A NAME=MARKER-2-450></A>program</H4>
+
  Actions to be performed at specific points in a [["#MARKER-9-449">program</DIV>. These [["#MARKER-9-396">actions</DIV> are applied at the probe points in memory, without modifying the program files on disk.<H4><DIV ID=MARKER-9-449></DIV><DIV ID=MARKER-2-450></DIV>program</H4>
  An executable or JRE together with all the classes or shared libraries that it loads, also known as an <A HREF="#MARKER-9-401">application</A>.<H4><A NAME=MARKER-9-451></A><A NAME=MARKER-2-452></A>register</H4>
+
  An executable or JRE together with all the classes or shared libraries that it loads, also known as an [["#MARKER-9-401">application</DIV>.<H4><DIV ID=MARKER-9-451></DIV><DIV ID=MARKER-2-452></DIV>register</H4>
  To associate a <A HREF="#MARKER-9-449">program</A> with a <A HREF="#MARKER-9-482">workspace</A>, so that <A HREF="#MARKER-9-475">tracing</A> will occur when the program is run with rootcause on.<H4><A NAME=MARKER-9-453></A><A NAME=MARKER-2-454></A>registry</H4>
+
  To associate a [["#MARKER-9-449">program</DIV> with a [["#MARKER-9-482">workspace</DIV>, so that [["#MARKER-9-475">tracing</DIV> will occur when the program is run with rootcause on.<H4><DIV ID=MARKER-9-453></DIV><DIV ID=MARKER-2-454></DIV>registry</H4>
  The database mapping <A HREF="#MARKER-9-449">program</A>s to <A HREF="#MARKER-9-482">workspace</A>s, and recording other information that must be checked when programs are <A HREF="#MARKER-9-458">run with rootcause on</A>. This is implemented as a text file named by the environment variable APROBE_REGISTRY<A NAME=MARKER-10-455></A>.<H4><A NAME=MARKER-9-456></A><A NAME=MARKER-2-457></A>remote</H4>
+
  The database mapping [["#MARKER-9-449">program</DIV>s to [["#MARKER-9-482">workspace</DIV>s, and recording other information that must be checked when programs are [["#MARKER-9-458">run with rootcause on</DIV>. This is implemented as a text file named by the environment variable APROBE_REGISTRY<DIV ID=MARKER-10-455></DIV>.<H4><DIV ID=MARKER-9-456></DIV><DIV ID=MARKER-2-457></DIV>remote</H4>
  Refers to a machine or execution environment separate from that in which an <A HREF="#MARKER-9-401">application</A> is developed; the opposite of <A HREF="#MARKER-9-434">local</A>. In a remote environment, the <A HREF="#MARKER-9-440">module</A>s that make up a <A HREF="#MARKER-9-449">program</A> may be fully or partially <A HREF="#MARKER-9-468">stripped</A>, and the <A HREF="#MARKER-9-482">workspace</A> in which the probes were developed is not accessible, so the workspace must be <A HREF="#MARKER-9-418">deploy</A>ed.<H4><A NAME=MARKER-9-458></A><A NAME=MARKER-2-459></A>run with rootcause on</H4>
+
  Refers to a machine or execution environment separate from that in which an [["#MARKER-9-401">application</DIV> is developed; the opposite of [["#MARKER-9-434">local</DIV>. In a remote environment, the [["#MARKER-9-440">module</DIV>s that make up a [["#MARKER-9-449">program</DIV> may be fully or partially [["#MARKER-9-468">stripped</DIV>, and the [["#MARKER-9-482">workspace</DIV> in which the probes were developed is not accessible, so the workspace must be [["#MARKER-9-418">deploy</DIV>ed.<H4><DIV ID=MARKER-9-458></DIV><DIV ID=MARKER-2-459></DIV>run with rootcause on</H4>
  To execute a <A HREF="#MARKER-9-449">program</A> in an environment where RootCause is intercepting processes. This is generally done by running the rootcause_on<A NAME=MARKER-10-460></A> command, then running the application. (On AIX, use the <A HREF="rcc-12.html#MARKER-9-2119">rootcause run</A> command; see <A HREF="rcc-7.html#MARKER-9-532">"Enabling RootCause for an AIX Application"</A>).  Some simple applications may be run directly with the Rootcause GUI Run button. <H4><A NAME=MARKER-9-461></A><A NAME=MARKER-2-462></A>shared library</H4>
+
  To execute a [["#MARKER-9-449">program</DIV> in an environment where RootCause is intercepting processes. This is generally done by running the rootcause_on<DIV ID=MARKER-10-460></DIV> command, then running the application. (On AIX, use the [["rcc-12.html#MARKER-9-2119">rootcause run</DIV> command; see [["rcc-7.html#MARKER-9-532">"Enabling RootCause for an AIX Application"</DIV>).  Some simple applications may be run directly with the Rootcause GUI Run button. <H4><DIV ID=MARKER-9-461></DIV><DIV ID=MARKER-2-462></DIV>shared library</H4>
  A linked object file which may be shared by many programs, but cannot be run by itself<A NAME=MARKER-10-463></A>. <H4><A NAME=MARKER-2-464></A><A NAME=MARKER-9-465></A>shadow header file</H4>
+
  A linked object file which may be shared by many programs, but cannot be run by itself<DIV ID=MARKER-10-463></DIV>. <H4><DIV ID=MARKER-2-464></DIV><DIV ID=MARKER-9-465></DIV>shadow header file</H4>
  A a C header file which provides debug information for the system library of the similar name.  For example, $APROBE/shadow/libc.so.h is a shadow header for libc.so on Solaris<A NAME=MARKER-10-466></A><H4><A NAME=MARKER-9-467></A>snapshot</H4>
+
  A a C header file which provides debug information for the system library of the similar name.  For example, $APROBE/shadow/libc.so.h is a shadow header for libc.so on Solaris<DIV ID=MARKER-10-466></DIV><H4><DIV ID=MARKER-9-467></DIV>snapshot</H4>
  A copy of data saved at the point of a notable event. In the context of RootCause, SNAPSHOT <A HREF="#MARKER-9-447">probes</A> may be inserted which ensure that the associated data is preserved.<H4><A NAME=MARKER-9-468></A><A NAME=MARKER-2-469></A>stripped</H4>
+
  A copy of data saved at the point of a notable event. In the context of RootCause, SNAPSHOT [["#MARKER-9-447">probes</DIV> may be inserted which ensure that the associated data is preserved.<H4><DIV ID=MARKER-9-468></DIV><DIV ID=MARKER-2-469></DIV>stripped</H4>
  An application which was built with debug and symbol information, but from which that information has subsequently been removed (such as by running the <CODE>strip(1)</CODE> command<A NAME=MARKER-10-470></A>), is referred to as a "stripped" application. <H4><A NAME=MARKER-9-471></A>timestamp</H4>
+
  An application which was built with debug and symbol information, but from which that information has subsequently been removed (such as by running the <CODE>strip(1)</CODE> command<DIV ID=MARKER-10-470></DIV>), is referred to as a "stripped" application. <H4><DIV ID=MARKER-9-471></DIV>timestamp</H4>
  a string indicating the "wall-clock time" at which an <A HREF="#MARKER-9-421">event</A> occurred.<H4><A NAME=MARKER-9-472></A>traceback</H4>
+
  a string indicating the "wall-clock time" at which an [["#MARKER-9-421">event</DIV> occurred.<H4><DIV ID=MARKER-9-472></DIV>traceback</H4>
  A display of the call stack starting with the function/method in which the traceback was generated, followed by its caller, then its caller's caller, etc.<H4><A NAME=MARKER-9-473></A><A NAME=MARKER-2-474></A>traces</H4>
+
  A display of the call stack starting with the function/method in which the traceback was generated, followed by its caller, then its caller's caller, etc.<H4><DIV ID=MARKER-9-473></DIV><DIV ID=MARKER-2-474></DIV>traces</H4>
  A subset of probes which quickly record the entry and exit of identified functions or methods. These are indicated in the <A HREF="#MARKER-9-429">GUI</A><A HREF="rcc-11.html#MARKER-9-1531">Trace Setup Dialog</A> by black dots next to the entities containing traces, as distinct from <A HREF="#MARKER-9-447">probes</A>.<H4><A NAME=MARKER-9-475></A><A NAME=MARKER-2-476></A>tracing</H4>
+
  A subset of probes which quickly record the entry and exit of identified functions or methods. These are indicated in the [["#MARKER-9-429">GUI</DIV>[["rcc-11.html#MARKER-9-1531">Trace Setup Dialog</DIV> by black dots next to the entities containing traces, as distinct from [["#MARKER-9-447">probes</DIV>.<H4><DIV ID=MARKER-9-475></DIV><DIV ID=MARKER-2-476></DIV>tracing</H4>
  The process of applying the <A HREF="#MARKER-9-473">traces</A> and <A HREF="#MARKER-9-447">probes</A> in a RootCause <A HREF="#MARKER-9-482">workspace</A> to an <A HREF="#MARKER-9-401">application</A>. We use this term in general to refer to the data-gathering that takes place when a <A HREF="#MARKER-9-451">register</A>ed application is running with rootcause on.<H4><A NAME=MARKER-2-477></A>trigger</H4>
+
  The process of applying the [["#MARKER-9-473">traces</DIV> and [["#MARKER-9-447">probes</DIV> in a RootCause [["#MARKER-9-482">workspace</DIV> to an [["#MARKER-9-401">application</DIV>. We use this term in general to refer to the data-gathering that takes place when a [["#MARKER-9-451">register</DIV>ed application is running with rootcause on.<H4><DIV ID=MARKER-2-477></DIV>trigger</H4>
  The point at which an action takes place. In particular, when defining probes within the <A HREF="rcc-11.html#MARKER-9-1589">Probes Pane</A>, it may be the entry or exit of a program, thread, or function<A NAME=MARKER-10-478></A>.<H4><A NAME=MARKER-9-479></A><A NAME=MARKER-2-480></A>UAL</H4>
+
  The point at which an action takes place. In particular, when defining probes within the [["rcc-11.html#MARKER-9-1589">Probes Pane</DIV>, it may be the entry or exit of a program, thread, or function<DIV ID=MARKER-10-478></DIV>.<H4><DIV ID=MARKER-9-479></DIV><DIV ID=MARKER-2-480></DIV>UAL</H4>
  "User Action Library", a <A HREF="#MARKER-9-461">shared library</A><A NAME=MARKER-10-481></A> defining "user <A HREF="#MARKER-9-396">actions</A>" or <A HREF="#MARKER-9-447">probes</A>, and the program points to which they are applied. A UAL is compiled from one or more <A HREF="#MARKER-9-390">APC</A> files.<H4><A NAME=MARKER-9-482></A><A NAME=MARKER-2-483></A>workspace</H4>
+
  "User Action Library", a [["#MARKER-9-461">shared library</DIV><DIV ID=MARKER-10-481></DIV> defining "user [["#MARKER-9-396">actions</DIV>" or [["#MARKER-9-447">probes</DIV>, and the program points to which they are applied. A UAL is compiled from one or more [["#MARKER-9-390">APC</DIV> files.<H4><DIV ID=MARKER-9-482></DIV><DIV ID=MARKER-2-483></DIV>workspace</H4>
  A directory with suffix <CODE><A NAME=MARKER-2-484></A>.aws</CODE> created and managed by the RootCause <A HREF="#MARKER-9-429">GUI</A> and <CODE>rootcause</CODE> command, which contains the <A HREF="#MARKER-9-473">traces</A> and <A HREF="#MARKER-9-447">probes</A> on an <A HREF="#MARKER-9-401">application</A>, the <A HREF="#MARKER-9-393">APD ring</A>s generated from those, and scripts for <A HREF="#MARKER-9-427">format</A>ting that data.<H4><A NAME=MARKER-10-485></A><A NAME=MARKER-9-486></A><A NAME=MARKER-2-487></A>XML</H4>
+
  A directory with suffix <CODE><DIV ID=MARKER-2-484></DIV>.aws</CODE> created and managed by the RootCause [["#MARKER-9-429">GUI</DIV> and <CODE>rootcause</CODE> command, which contains the [["#MARKER-9-473">traces</DIV> and [["#MARKER-9-447">probes</DIV> on an [["#MARKER-9-401">application</DIV>, the [["#MARKER-9-393">APD ring</DIV>s generated from those, and scripts for [["#MARKER-9-427">format</DIV>ting that data.<H4><DIV ID=MARKER-10-485></DIV><DIV ID=MARKER-9-486></DIV><DIV ID=MARKER-2-487></DIV>XML</H4>
  "eXtended Markup Language", a text language for expressing hierarchical information. RootCause <A HREF="#MARKER-9-427">format</A>s the <A HREF="#MARKER-9-392">APD file</A>s collected by <A HREF="#MARKER-9-475">tracing</A> into an informal XML syntax which is then consumed by the <A HREF="#MARKER-9-429">GUI</A>.<A NAME="LINK-03terminology_rc.fm-lastpage"></A></DIV><DIV>
+
  "eXtended Markup Language", a text language for expressing hierarchical information. RootCause [["#MARKER-9-427">format</DIV>s the [["#MARKER-9-392">APD file</DIV>s collected by [["#MARKER-9-475">tracing</DIV> into an informal XML syntax which is then consumed by the [["#MARKER-9-429">GUI</DIV>.<DIV ID="LINK-03terminology_rc.fm-lastpage"></DIV></DIV><DIV>
 
----
 
----
  
<A HREF=rcc-7.html>[Next]</A><A HREF=rcc-5.html>[Previous]</A><A HREF=rcc-1.html>[Top]</A><A HREF=rcc-3.html>[Contents]</A><A HREF=rcc-14.html>[Index]</A>
+
[[rcc-7.html>[Next]</DIV>[[rcc-5.html>[Previous]</DIV>[[rcc-1.html>[Top]</DIV>[[rcc-3.html>[Contents]</DIV>[[rcc-14.html>[Index]</DIV>
 
<ADDRESS>Copyright 2006  OC Systems, Inc.</ADDRESS>
 
<ADDRESS>Copyright 2006  OC Systems, Inc.</ADDRESS>
 
</DIV>  
 
</DIV>  

Revision as of 04:57, 15 September 2017

Next Previous Index Top

RootCause User Guide

Terminology and Concepts


rcc-6


RootCause® is an extension of the Aprobe® product, a powerful general-purpose patching tool that has been in use for years. As such, much of the terminology, organization and documentation of RootCause refer to those of Aprobe. 
Here we describe general terminology and concepts that apply to RootCause and Aprobe, focusing on the RootCause product. A minimal amount of Aprobe documentation is supplied here, just enough to support the RootCause definitions. For additional information, see the [[cover.html>Aprobe user's guide
($APROBE/Aprobe.pdf)
.

The RootCause Product

We use the terms
application
and
program
interchangeably throughout the RootCause product. An application or program is represented by
an executable object module
. We use the term
probe
when describing what RootCause does: RootCause "probes" a running application. The probes created by RootCause do things like tracing, timing, data collection and more. Note that these probes are added only to the in-memory copy of the running application; RootCause does not modify the disk-resident application at all. Each application that is probed by RootCause is assigned a workspace. A
workspace is a directory where RootCause can put all of its important files (including the data collection files) at runtime.
Each workspace is created and initialized only once, when RootCause is first invoked on an application. Thereafter, RootCause automatically manipulates the workspace contents, so users can ignore the workspace during normal use. For each probed application, there is one workspace; and for each workspace, there is one application. 
We use the term
log
as a verb to describe Aprobe's low-overhead data recording mechanism. RootCause logs its data into files in the workspace. For best
performance, workspaces should be on a
local disk (not remotely mounted). The RootCause product is invoked
by the command rootcause (see [["rcc-12.html#MARKER-9-2008">Chapter 9, "RootCause Command Reference"

). The RootCause product consists of two major components: the

RootCause Console and the

RootCause Agent. The RootCause Console component allows you to create probes and examine the trace data generated by the probes. The RootCause Agent is the component that performs the actual runtime tracing and generates the trace data. You can choose to install only the RootCause Agent on a remote computer and then use the RootCause Console's

deploy operation to create a workspace for that remote computer. The deployed workspace can then be transferred to the remote computer for use by the RootCause Agent there, and the trace data can be transferred back to the RootCause Console for examination.

The RootCause Registry

The RootCause Agent is enabled on a per-process-group

basis via an environment variable. When rootcause is "on" in your environment, RootCause will identify and optionally record the creation of every new process

and subprocess created in that shell or subshells inherited from that shell in the RootCause [["#MARKER-9-438">log.

If the executable

for the process is listed in the RootCause [["#MARKER-9-453">registry, then RootCause will insert probes into that process to collect data the next time it is launched (when you registered the program, you specified the workspace associated with the executable

and that workspace contains the probes). If the executable

does not appear in the registry, then RootCause allows the process to continue undisturbed.

The RootCause Log

The RootCause log is the central reporting place for RootCause. By default, RootCause records every process that is started while "rootcause_

on" is in effect. RootCause also writes error messages to this file. The default behavior when starting the RootCause Console [["#MARKER-9-429">GUI (with the "rootcause open" command) is to view this log, from which you may read error messages, open workspaces, and view trace results. The log is a fixed size, and wraps around to avoid growing too large. The [["rcc-12.html#MARKER-9-2075">rootcause log command manages attributes of this file.

Aprobe Product

Since RootCause is an extension of the Aprobe product, the setup scripts define an environment variable, APROBE, which identifies the RootCause installation directory. $APROBE is used throughout this manual to refer to the installation directory of the Aprobe and RootCause products. This section introduces some Aprobe terminology.

A tracing probe created with the RootCause Console is defined in an

APC (AProbe C) file, which contains ANSI C code interspersed with Aprobe preprocessor directives. The APC file is compiled and linked using your native

C compiler, and the resulting object code is written to a

UAL (User Action Library)

file. It is the UAL file that is used at runtime to dynamically apply your tracing probes. As your program executes, tracing data is logged (i.e. written) to an APD (AProbe Data) file. Almost always, more than one

APD file is allocated, and these files are used in a round-robin fashion (the oldest APD file is always overwritten). This set of APD files is referred to as an

APD ring. There is a separate control file that is used to manage all the files in the APD ring; this control file is named the APD ring file. APD files are written in a proprietary binary format. The

apformat command reads APD, UAL and program files and generates readable text.

RootCause Data Management

Tracing an application raises a number of questions about managing the data that is recorded.

  1. How can trace data be recorded quickly?
  2. How can the least amount of data be recorded?
  3. How can data recorded by multiple instances of the same program be preserved and organized?
  4. How can the total amount of data recorded by bounded, to keep from filling up the disk?
  5. How can users "
    snapshot" important data to be kept, while still bounding the total data collected?
  6. How can users find what they're looking for in the data that is collected?

To address these issues, RootCause provides an interface to the Aprobe "log" mechanism which provides powerful and flexible data-recording and formatting capabilities. Here's how they work.

Recording Data Quickly

Aprobe logging uses memory-mapped files to record the data. Each process has its own set of data files mapped to distinct memory regions, which avoids bottlenecks and locking problems when several processes are logging data simultaneously. Thread-safety is managed primarily using a lock-free compare-and-swap mechanism, though some locking is still required when switching data files.

However, even though the files are memory mapped, the contents must eventually be written to disk, and this is limited by I/O speeds to the disk device. For this reason, it is very important that the workspace directory (where RootCause writes the data files) be "local" (directly connected to the machine where the traced program is running) and not accessed across the network (e.g., using NFS). If you are collecting data from a program running on multiple machines using the same workspace, or have other special requirements, contact OC Systems.

Recording Less Data

The Aprobe "log" mechanism automatically separates the recording of data from its display and formatting. For example, timestamps are recorded simply as 64-bit values at run-time, then formatted as desired later. String literals and labels are also added as part of formatting. This has the added benefit of being able to format the same data in multiple ways without rerunning the application.

Data for Multiple Processes

The data associated with each process is saved in a "

[["#MARKER-9-444">Process Data Set", or "[["#MARKER-9-393">APD ring", a directory identified by the [["#MARKER-9-443">PID of that process. The user specifies how many of these should be saved, and when that limit is reached, the oldest Process Data Set is deleted when tracing of a new process is started.

Bounding Total Data

As mentioned above, the user specifies how many processes' data are to be saved. In addition, the amount of data saved for each process is also highly configurable. The data for each process is treated as a multi-file circular buffer, or "[["#MARKER-9-393">APD ring". Each file is called an "[["#MARKER-9-392">APD file" because of its suffix, ".apd". At the Aprobe level the user may specify the size of each file, the number of files in each ring; and the number of snapshot files saved. RootCause makes this a bit easier by offering the following parameters in the [["rcc-11.html#MARKER-9-1463">RootCause Options Dialog:

  • [["rcc-11.html#MARKER-9-1466">Keep logged data for N previous processes This specifies the number of Process Data Sets to keep, as described above.
  • [["rcc-11.html#MARKER-9-1468">Data File Size (bytes) This specifies the size of each "[["#MARKER-9-392">APD file".
  • [["rcc-11.html#MARKER-9-1470">Wraparound data logging wraps at N (bytes) This specifies the total "wraparound buffer" size, which corresponds to the number of individual data files that are kept for each process before the oldest start being deleted.
  • [["rcc-11.html#MARKER-9-1472">Total logged data limit per process (bytes) Files may be preserved even when they might otherwise be deleted, using a [["#MARKER-9-467">snapshot mechanism described below. This parameter allows the user to set a hard upper bound on the total data per process, even when many snapshots are taken.

Data Snapshots

RootCause provides a mechanism for a "

snapshot" to be taken programatically. This does not copy the data, but rather marks it as "

preserved" so it is not deleted by the normal wraparound mechanism described above. RootCause allows a user to identify points during program execution at which a snapshot of the data is to be taken. At the Aprobe level, users may specify arbitrarily complex conditions under which a snapshot is taken. This mechanism is used by the [["rcc-11.html#MARKER-9-1344">java_exceptions predefined UAL, which causes a snapshot to be taken when selected Java runtime exceptions occur.

Data Indexing

RootCause provides four levels of control in accessing the data:

  • the [["#MARKER-9-444">Process Data Set;
  • individual [["#MARKER-9-407">Data Files;
  • special events in the [["rcc-11.html#MARKER-9-1680">Trace Index Dialog; and
  • individual events in the [["rcc-11.html#MARKER-9-1725">Trace Display.

Data is generally selected via the Trace Index Dialog, by double-clicking on a Process Data Set in the Workspace Tree, or by clicking the Index button. Index entries are shown for the "Last Data Recorded", and for any snapshots taken. In addition, any exceptions detected by the [["rcc-11.html#MARKER-9-1342">exceptions and [["rcc-11.html#MARKER-9-1344">java_exceptions predefined UALs may be shown in the Index. (We anticipate additional kinds of events being available through the Trace Index in future versions.) One or more events may be selected in the Index, and a Trace Display opened on the files surrounding that event. You can control the size of the context around the event via the [["rcc-11.html#MARKER-9-1463">RootCause Options Dialog.

From the Trace Index Dialog you can specify what Data Files the Index is to be generated from, and you can add data files from additional processes, and even additional workspaces.    Using the Examine button in the Workspace Browser you can directly specify which Data Files are to be viewed, without going through the Index. 

Once you have selected which data files to view, you can view all the data collected in the [["rcc-11.html#MARKER-9-1725">Trace Display. This shows all the events ordered by thread or by-time, and organized as a call tree within each thread. One can do textual searches through this display for specific events. Data may be added or removed from a Trace Display at the Data File level, and the RootCause Log may be merged with it as well to show the interaction of multiple processes.

RootCause Overhead Management

After a program has started, the

overhead that a RootCause trace adds is proportional to the number of traced

function calls made by the program as it's running. Often it's the case that the most-frequently-called

functions are of little interest in the trace, and yet are introducing the most overhead. RootCause provides several mechanisms to control tracing overhead, and focus the tracing to the time when it will provide the most information.

Load Shedding

RootCause manages tracing overhead by

[["#MARKER-9-433">load shedding, a process by which tracing is disabled based on its estimated tracing overhead. This is done automatically by default, based on a heuristic analysis of CPU time used by traced functions. You can disable load shedding, or adjust the heuristics, with the [["rcc-11.html#MARKER-9-1646">Global Trace Options Dialog opened by clicking the Options button at the bottom of the [["rcc-11.html#MARKER-9-1531">Trace Setup Dialog. When viewing the data, if there are any functions that were load shed, a LOAD_SHED node will appear in the [["rcc-11.html#MARKER-9-1797">Event Trace Tree, from which you can open a [["rcc-11.html#MARKER-9-1857">LOAD_SHED Table to see exactly which functions were disabled and when.

Using this table you may change the disposition of some or all of the functions during the next run. Usually you will simply want to select all the functions listed and change them to "Don't Trace" so they aren't traced at all in subsequent runs. However, occasionally a function will be disabled that is important to trace, and in this case you may mark that function as "Don't Shed" to force it to be traced regardless of the overhead.

Traced

functions designated as "Don't Shed" are marked with a red dot in the [["rcc-11.html#MARKER-9-1531">Trace Setup Dialog. You can enable or disable load shedding on a specific

function using the [["rcc-11.html#MARKER-9-1545">Trace Setup Popup Menu.

Enable/Disable Tracing

RootCause provides a mechanism to

disable tracing at the start of the program, (or any other point) and enable it upon entry to (or exit from) a

function executed later on. This is conceptually a global switch that can be turned on and off during program execution. So, for example, if your program does a lot of processing during initialization, but you're not interested in tracing that, you can: Select the Program node in the [["rcc-11.html#MARKER-9-1531">Trace Setup Dialog, and using the [["rcc-11.html#MARKER-9-1589">Probes Pane configure a Probe On Program Entry to Disable Tracing. Then you can select a

function that is called at the start of the processing you want to trace and create a Probe On Entry to Enable Tracing. As with most features available through the RootCause console, you can get even more control and power with a custom probe which directly calls the Aprobe runtime functions

ap_RootCauseTraceEnable() and

ap_RootCauseTraceDisable() to enable and disable tracing only if certain conditions or data values are detected in the program. Contact support@ocsystems.com for more information on writing custom probes.

Glossary

Discussion of RootCause and Aprobe requires the use of terms that are either specific to the products or assigned a special meaning in the context of the product. Many of these terms are also defined above and elsewhere in this guide, but are listed here for easy reference.

ADI file

Aprobe Debug Information file, which contains symbol and line information extracted from a [["#MARKER-9-440">module for use by [["#MARKER-9-418">deployed probes on [["#MARKER-9-401">applications which have been [["#MARKER-9-468">stripped of debug and symbol information.

APC

"AProbe C" language, a superset of the C programming language, used to define [["#MARKER-9-447">probes. An APC file is a text file containing APC source code. APC files are compiled into a [["#MARKER-9-479">UAL file using the apc command.

APD file

"AProbe Data" file, containing information written in a compressed format by the [["#MARKER-9-436">log command. These files are [["#MARKER-9-427">formatted (generally converted to text) by the apformat command.

APD ring

A set of [["#MARKER-9-392">APD files corresponding to a single execution of an [["#MARKER-9-401">application. There is always one persistent file, "name.apd", and one or more ring files "name-1.apd", "name-2.apd", etc., grouped together in a directory having the same name as the persistent file, but with a suffix corresponding to the

PID of the traced process, e.g., "name.apd.12345".

actions

Operations, generally gathering or counting data, that are applied at a certain point in a program. Actions, combined with the points where they are applied, make up [["#MARKER-9-447">probes.

agent

The part of the RootCause product which actually applies and enables the [["#MARKER-9-447">probes, also known as the Aprobe runtime.

apc

The Aprobe command which compiles an [["#MARKER-9-390">APC file into a [["#MARKER-9-479">UAL.

apformat

The Aprobe command which [["#MARKER-9-427">formats (generates text from) [["#MARKER-9-392">APD files.

application

An executable or JRE together with all the classes or shared libraries that it loads, also known as a [["#MARKER-9-449">program.

aprobe

The Aprobe command which actually applies [["#MARKER-9-447">probes to a [["#MARKER-9-449">program.

collect

To identify the [["#MARKER-9-392">APD files from one or more [["#MARKER-9-482">workspaces and compress them, along with other necessary information, into a single file with the suffix

.clct, usually in preparation for moving from a remote machine back to a local [["#MARKER-9-406">Console installation for analysis.

Console

The RootCause [["#MARKER-9-429">GUI and supporting Aprobe tools (e.g., apc, apformat), through which all development and analysis of traces is performed.

Data File

A file containing RootCause data logged when a process is run under rootcause; another name for an [["#MARKER-9-392">APD file.

decollect

To expand a .clct file back into a directory with suffix

.dclct for analysis by the RootCause [["#MARKER-9-406">Console.

decollection

the .dclct directory tree created by the [["#MARKER-9-410">decollect operation.

dynamic module

A [["#MARKER-9-461">shared library that is explicitly loaded by a program after execution has begun. See [["rcc-11.html#MARKER-9-1380">"Add Dynamic Module" and [["rcc-13.html#MARKER-9-2183">"Dynamically Loaded Libraries".

deploy

To compress the information in a [["#MARKER-9-482">workspace into a file with a

.dply suffix, and transfer that file to a [["#MARKER-9-456">remote computer for tracing an [["#MARKER-9-401">application there.

event

any of a number of specially-tagged data items [["#MARKER-9-436">logged by RootCause and shown in the

[["rcc-11.html#MARKER-9-1680">Trace Index Dialog or

[["rcc-11.html#MARKER-9-1797">Event Trace Tree, or printed by the

rootcause format command.

executable

A binary object file containing the entry point of an [["#MARKER-9-401">application which may be run directly; this is distinct from a [["#MARKER-9-461">shared library, which must be loaded in the context of a running executable.

format

To process the contents of [["#MARKER-9-392">APD files into text, or other meaningful output, using the Aprobe apformat command. Data collected by RootCause is generally formatted into [["#MARKER-9-486">XML before being read into the RootCause Console.

GUI

The Graphical User Interface portion of the RootCause [["#MARKER-9-406">Console. See [["rcc-11.html#MARKER-9-1320">Chapter 8, "RootCause GUI Reference".

JRE

"Java Runtime Environment", the environment which directly executes Java applications. The RootCause [["#MARKER-9-429">GUI is implemented in Java and so ships with a JRE. RootCause for Java allows you to define Java traces for supported JREs.

JVM

"Java Virtual Machine", the portion of an application (e.g., java, Netscape) which loads and executes Java class files and applets. This is generally implemented as a single library within the [["#MARKER-9-431">JRE.

load shedding

The process of dynamically disabling tracing of functions or methods based on the tracing overhead they introduce into the program. This mechanism prevents tracing from slowing down a program too much, and automatically creates a list of methods to be eliminated from subsequent traces.

local

Referring to the machine and execution environment in which the RootCause [["#MARKER-9-406">Console is installed, where [["#MARKER-9-473">traces, and perhaps the traced [["#MARKER-9-401">application itself, are developed; the opposite of [["#MARKER-9-456">remote, where the [["#MARKER-9-399">agent is installed.

log

verb: the recording of data by RootCause info an APD file.

log

noun: the

RootCause Log, in which information about processes is recorded.

module

A loadable object module; an [["#MARKER-9-425">executable or [["#MARKER-9-461">shared library. In RootCause for Java, a class and all its supporting classes are managed as a module as well.

PID

Process ID, the number assigned to each process on the system, and used to uniquely identify each [["#MARKER-9-393">APD ring generated by [["#MARKER-9-475">tracing that process.

Process Data Set

The group of [["#MARKER-9-407">Data Files associated with a single process ([["#MARKER-9-443">PID); another name for an [["#MARKER-9-393">APD ring.

predefined UAL

A ready-to-use [["#MARKER-9-479">UAL which may be applied to any application to perform a specific function. Some are provided with RootCause, additional ones with Aprobe, and more can be developed by users.

probes

Actions to be performed at specific points in a [["#MARKER-9-449">program. These [["#MARKER-9-396">actions are applied at the probe points in memory, without modifying the program files on disk.

program

An executable or JRE together with all the classes or shared libraries that it loads, also known as an [["#MARKER-9-401">application.

register

To associate a [["#MARKER-9-449">program with a [["#MARKER-9-482">workspace, so that [["#MARKER-9-475">tracing will occur when the program is run with rootcause on.

registry

The database mapping [["#MARKER-9-449">programs to [["#MARKER-9-482">workspaces, and recording other information that must be checked when programs are [["#MARKER-9-458">run with rootcause on. This is implemented as a text file named by the environment variable APROBE_REGISTRY

.

remote

Refers to a machine or execution environment separate from that in which an [["#MARKER-9-401">application is developed; the opposite of [["#MARKER-9-434">local. In a remote environment, the [["#MARKER-9-440">modules that make up a [["#MARKER-9-449">program may be fully or partially [["#MARKER-9-468">stripped, and the [["#MARKER-9-482">workspace in which the probes were developed is not accessible, so the workspace must be [["#MARKER-9-418">deployed.

run with rootcause on

To execute a [["#MARKER-9-449">program in an environment where RootCause is intercepting processes. This is generally done by running the rootcause_on

command, then running the application. (On AIX, use the [["rcc-12.html#MARKER-9-2119">rootcause run command; see [["rcc-7.html#MARKER-9-532">"Enabling RootCause for an AIX Application"). Some simple applications may be run directly with the Rootcause GUI Run button.

shared library

A linked object file which may be shared by many programs, but cannot be run by itself

.

shadow header file

A a C header file which provides debug information for the system library of the similar name. For example, $APROBE/shadow/libc.so.h is a shadow header for libc.so on Solaris

snapshot

A copy of data saved at the point of a notable event. In the context of RootCause, SNAPSHOT [["#MARKER-9-447">probes may be inserted which ensure that the associated data is preserved.

stripped

An application which was built with debug and symbol information, but from which that information has subsequently been removed (such as by running the strip(1) command

), is referred to as a "stripped" application.

timestamp

a string indicating the "wall-clock time" at which an [["#MARKER-9-421">event occurred.

traceback

A display of the call stack starting with the function/method in which the traceback was generated, followed by its caller, then its caller's caller, etc.

traces

A subset of probes which quickly record the entry and exit of identified functions or methods. These are indicated in the [["#MARKER-9-429">GUI[["rcc-11.html#MARKER-9-1531">Trace Setup Dialog by black dots next to the entities containing traces, as distinct from [["#MARKER-9-447">probes.

tracing

The process of applying the [["#MARKER-9-473">traces and [["#MARKER-9-447">probes in a RootCause [["#MARKER-9-482">workspace to an [["#MARKER-9-401">application. We use this term in general to refer to the data-gathering that takes place when a [["#MARKER-9-451">registered application is running with rootcause on.

trigger

The point at which an action takes place. In particular, when defining probes within the [["rcc-11.html#MARKER-9-1589">Probes Pane, it may be the entry or exit of a program, thread, or function

.

UAL

"User Action Library", a [["#MARKER-9-461">shared library

defining "user [["#MARKER-9-396">actions" or [["#MARKER-9-447">probes, and the program points to which they are applied. A UAL is compiled from one or more [["#MARKER-9-390">APC files.

workspace

A directory with suffix

.aws created and managed by the RootCause [["#MARKER-9-429">GUI and rootcause command, which contains the [["#MARKER-9-473">traces and [["#MARKER-9-447">probes on an [["#MARKER-9-401">application, the [["#MARKER-9-393">APD rings generated from those, and scripts for [["#MARKER-9-427">formatting that data.

XML

"eXtended Markup Language", a text language for expressing hierarchical information. RootCause [["#MARKER-9-427">formats the [["#MARKER-9-392">APD files collected by [["#MARKER-9-475">tracing into an informal XML syntax which is then consumed by the [["#MARKER-9-429">GUI.


[[rcc-7.html>[Next]

[[rcc-5.html>[Previous][[rcc-1.html>[Top][[rcc-3.html>[Contents][[rcc-14.html>[Index]

<ADDRESS>Copyright 2006 OC Systems, Inc.</ADDRESS>





Copyright 2006-2017 OC Systems, Inc.

Next Previous Index Top