pmdatrace(3) — Linux manual page

NAME | C SYNOPSIS | FORTRAN SYNOPSIS | JAVA SYNOPSIS | DESCRIPTION | NOTES | CAVEAT | DIAGNOSTICS | FILES | ENVIRONMENT | PCP ENVIRONMENT | SEE ALSO | COLOPHON

PMTRACE(3)               Library Functions Manual              PMTRACE(3)

NAME         top

       pmtracebegin, pmtraceend, pmtraceabort, pmtracepoint, pmtraceobs,
       pmtracecounter, pmtracestate, pmtraceerrstr - application-level
       performance instrumentation services

C SYNOPSIS         top

       #include <pcp/trace.h>

       int pmtracebegin(const char *tag);
       int pmtraceend(const char *tag);
       int pmtraceabort(const char *tag);
       int pmtracepoint(const char *tag);
       int pmtraceobs(const char *tag, double value);
       int pmtracecounter(const char *tag, double value);
       char *pmtraceerrstr(int code);
       int pmtracestate(int flags);

       cc ... -lpcp_trace

FORTRAN SYNOPSIS         top

       character*(*) tag
       integer code
       integer flags
       integer state
       character*(*) estr
       real*8 value

       code = pmtracebegin(tag)
       code = pmtraceend(tag)
       code = pmtraceabort(tag)
       code = pmtracepoint(tag)
       code = pmtraceobs(tag, value)
       code = pmtracecounter(tag, value)
       pmtraceerrstr(code, estr)
       state = pmtracestate(flags)

       f77 ... -lpcp_trace  or  f90 ... -lpcp_trace

JAVA SYNOPSIS         top

       import sgi.pcp.trace;

       int trace.pmtracebegin(String tag);
       int trace.pmtraceend(String tag);
       int trace.pmtraceabort(String tag);
       int trace.pmtracepoint(String tag);
       int trace.pmtraceobs(String tag, double value);
       int trace.pmtracecounter(String tag, double value);
       String trace.pmtraceerrstr(int code);
       int trace.pmtracestate(int flags);

DESCRIPTION         top

       The  pcp_trace library functions provide a mechanism for identify‐
       ing sections of a program as transactions or events for use by the
       trace Performance Metrics Domain Agent (refer to pmdatrace(1)  and
       PMDA(3)).

       The  monitoring  of  transactions  using  the Performance Co-Pilot
       (PCP) infrastructure is initiated through a call to  pmtracebegin.
       Time  will  be  recorded from the end of each pmtracebegin call to
       the start of the following call to pmtraceend, where the same  tag
       identifier is used in both calls.  Following from this, no visible
       recording will occur until at least one call to pmtraceend is made
       referencing a tag previously used in a call to pmtracebegin.

       A  transaction  which is currently in progress can be cancelled by
       calling pmtraceabort.  No transaction data gathered for that  par‐
       ticular  transaction will be exported, although data from previous
       and subsequent successful transactions  with  that  tag  name  are
       still exported.  This is most useful when an error condition aris‐
       es  during transaction processing and the transaction does not run
       to completion.

       The tag argument to pmtracebegin, pmtraceend and  pmtraceabort  is
       used  to  uniquely  identify each transaction within the pcp_trace
       library and later by the trace PMDA as the instance domain identi‐
       fiers for the transaction performance metrics  which  it  exports.
       These  routines  are  most  useful when used around blocks of code
       which are likely to be executed a number of times over some  rela‐
       tively long time period (in a daemon process, for example).

       pmtracebegin  has two distinct roles - firstly as the initiator of
       a new transaction, and secondly as a mechanism for setting  a  new
       start  time.   Similarly, pmtraceend is used to register a new tag
       and its initial state with the trace PMDA, or alternatively to up‐
       date the statistics which the PMDA currently associates  with  the
       given tag.

       A  second form of program instrumentation can be obtained from pm‐
       tracepoint.  This is a simpler form of monitoring  as  it  exports
       only  the number of times that a particular point in a program has
       been passed.  This differs to the transaction  monitoring  offered
       by  pmtracebegin  and pmtraceend, which exports a running count of
       successful transaction completions as well as  statistics  on  the
       time  interval  between  the start and end points of each transac‐
       tion.  This function is most useful when start and end points  are
       not well defined.  Examples of this would be when the code branch‐
       es  in such a way that a transaction cannot be clearly identified,
       or when processing does not follow a transactional model,  or  the
       desired  instrumentation  is akin to event rates rather than event
       service times.

       The pmtraceobs and pmtracecounter functions have similar semantics
       to pmtracepoint, but also allow an arbitrary numeric value  to  be
       passed  to  the trace PMDA.  The most recent value for each tag is
       then immediately available from the PMDA.  The only difference be‐
       tween pmtraceobs and pmtracecounter is that the value exported via
       pmtracecounter is assumed to be a monotonically increasing counter
       value (e.g. the number of bytes read from a socket),  whereas  the
       value exported via pmtraceobs can be any value at all.

       pmtracestate  allows  the application to set state flags which are
       honoured by subsequent calls to the  pcp_trace  library  routines.
       There  are  currently  two types of flag - debugging flags and the
       asynchronous protocol flag.  A single call may specify a number of
       flags together, combined using a (bitwise) logical  OR  operation,
       and overrides the previous state setting.

       The debugging flags to pmtracestate cause pcp_trace to print diag‐
       nostic  messages  on  the standard output stream at important pro‐
       cessing points.  The default protocol used between the trace  PMDA
       and individual pcp_trace client applications is a synchronous pro‐
       tocol, which allows for dropped connections to be reestablished at
       a later stage should this become possible.  An asynchronous proto‐
       col  is also available which does not provide the reconnection ca‐
       pability, but which does away with much of the  overhead  inherent
       in synchronous communication.  This behaviour can be toggled using
       the  pmtracestate  call,  but must be called before other calls to
       the library.  This differs to the debugging state behaviour, which
       can be altered at any time.   pmtracestate  returns  the  previous
       state (setting prior to being called).

       The following table describes each of the pmtracestate flags - ex‐
       amples  of  the  use of these flags in each supported language are
       given in the demo applications (refer to the ``FILES'' section be‐
       low).
        ┌─────────────┬───────────────────────────────────────────────┐
        │ State Flags │                   Semantics                   │
        ├─────────────┼───────────────────────────────────────────────┤
        │ 0  NONE     │ Synchronous PDUs and no diagnostics (default) │
        │ 1  API      │ Shows processing just below the API (debug)   │
        │ 2  COMMS    │ Shows network-related activity (debug)        │
        │ 4  PDU      │ Shows app<->PMDA IPC traffic (debug)          │
        │ 8  PDUBUF   │ Shows internal IPC buffer management (debug)  │
        │ 16 NOAGENT  │ No PMDA communications at all (debug)         │
        │ 32 ASYNC    │ Use the asynchronous PDU protocol (control)   │
        └─────────────┴───────────────────────────────────────────────┘

       Should any of the pcp_trace library functions  return  a  negative
       value, an error has occurred.  This can be diagnosed further using
       the  pmtraceerrstr  routine, which takes the negative return value
       as its code argument, and in the C-callable  interface  returns  a
       pointer to the associated error message.  This points into a stat‐
       ic  error  table,  and  should therefore not be passed to free(3).
       The Fortran-callable interface has a  slightly  different  syntax,
       requiring  the  destination character array to be passed in as the
       second argument.  The  Java-callable  interface  returns  a  UTF-8
       string, created using the JNI (Java Native Interface) routine New‐
       StringUTF.

NOTES         top

       The pcp_trace Java class interface has been developed and verified
       using  version  1.1  of the Java Native Interface (JNI) specifica‐
       tion.

CAVEAT         top

       Applications that use gethostbyname(3) should exercise caution be‐
       cause the static fields in struct hostent  may  not  be  preserved
       across  some  pcp_trace  calls.   In particular, pmtracebegin, pm‐
       traceend, pmtracepoint, pmtracecounter,  and  pmtraceobs  may  all
       call gethostbyname(3) internally.

DIAGNOSTICS         top

       A  negative  return value from a pcp_trace function indicates that
       an error has occurred - if this is the case, the return value  can
       be passed to pmtraceerrstr to obtain the associated error message.

       Success is indicated by a return value of zero.

       pmtracestate  also returns an integer representing the state flags
       which were set prior to the call.

FILES         top

       $PCP_DEMOS_DIR/trace/*.c
              Sample C programs and source for pmtrace(1).  Use make(1)
              to build these programs.

       $PCP_DEMOS_DIR/trace/fapp1.f
              Sample Fortran program.  Call `make fortran77' or `make
              fortran90' to build this program.

       $PCP_DEMOS_DIR/trace/japp1.java
              Sample Java program.  `make java' builds the java class
              file.

       /usr/java/classes/sgi/pcp/trace.java
              Java trace class definition.

ENVIRONMENT         top

       The pcp_trace routines communicate with the trace PMDA via a sock‐
       et connection, which by default uses TCP/IP port number 4323.
       This can be over-ridden by setting PCP_TRACE_PORT to a different
       port number when the application is started.  The host where the
       trace PMDA is running is by default the localhost, but this can be
       changed using PCP_TRACE_HOST.  When attempting to connect to a re‐
       mote trace PMDA, after some specified time interval has elapsed,
       the connection attempt will be aborted and an error status will be
       returned.  The default timeout interval is 3 seconds, and this can
       be modified by setting PCP_TRACE_TIMEOUT in the environment to a
       real number of seconds for the desired timeout.  This is most use‐
       ful in cases where the remote host is at the end of a slow net‐
       work, requiring longer latencies to establish the connection cor‐
       rectly.

PCP ENVIRONMENT         top

       Environment variables with the prefix PCP_ are used to parameter‐
       ize the file and directory names used by PCP.  On each installa‐
       tion, the file /etc/pcp.conf contains the local values for these
       variables.  The $PCP_CONF variable may be used to specify an al‐
       ternative configuration file, as described in pcp.conf(5).  Values
       for these variables may be obtained programmatically using the
       pmGetConfig(3) function.

SEE ALSO         top

       file:$PCP_DOC_DIR/Tutorial/trace.html, pcp.man.tutorial, Provided
       the, make(1), pmcd(1), pmdatrace(1), pmprobe(1), pmtrace(1), Rele‐
       vant information is also available from the on-line PCP Tutorial.

COLOPHON         top

       This page is part of the PCP (Performance Co-Pilot) project.  In‐
       formation about the project can be found at ⟨http://www.pcp.io/⟩.
       If you have a bug report for this manual page, send it to
       pcp@groups.io.  This page was obtained from the project's upstream
       Git repository ⟨https://github.com/performancecopilot/pcp.git⟩ on
       2025-08-11.  (At that time, the date of the most recent commit
       that was found in the repository was 2025-08-11.)  If you discover
       any rendering problems in this HTML version of the page, or you
       believe there is a better or more up-to-date source for the page,
       or you have corrections or improvements to the information in this
       COLOPHON (which is not part of the original manual page), send a
       mail to man-pages@man7.org

Performance Co-Pilot               PCP                         PMTRACE(3)

Pages that refer to this page: pmdatrace(1)pmtrace(1)