summaryrefslogtreecommitdiff
path: root/man/man3/pmafm.3
diff options
context:
space:
mode:
Diffstat (limited to 'man/man3/pmafm.3')
-rw-r--r--man/man3/pmafm.3479
1 files changed, 479 insertions, 0 deletions
diff --git a/man/man3/pmafm.3 b/man/man3/pmafm.3
new file mode 100644
index 0000000..6d0c122
--- /dev/null
+++ b/man/man3/pmafm.3
@@ -0,0 +1,479 @@
+'\"macro stdmacro
+.\"
+.\" Copyright (c) 1998-2008 Silicon Graphics, Inc. All Rights Reserved.
+.\"
+.\" This program is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License as published by the
+.\" Free Software Foundation; either version 2 of the License, or (at your
+.\" option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful, but
+.\" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+.\" or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+.\" for more details.
+.\"
+.\"
+.TH PMAFM 3 "PCP" "Performance Co-Pilot"
+.SH NAME
+\f3pmafm\f1,
+\f3pmRecordSetup\f1,
+\f3pmRecordAddHost\f1,
+\f3pmRecordControl\f1 \- record mode support for PMAPI clients
+.SH "C SYNOPSIS"
+.ft 3
+#include <pcp/pmafm.h>
+.sp
+.ad l
+.hy 0
+.in +8n
+.ti -8n
+FILE *pmRecordSetup(const char *\fIfolio\fP, const char *\fIcreator\fP, int\ \fIreplay\fP);
+.br
+.ti -8n
+int pmRecordAddHost(const char *\fIhost\fP, int \fIisdefault\fP, pmRecordHost\ **\fIrhp\fP);
+.br
+.ti -8n
+int pmRecordControl(pmRecordHost *\fIrhp\fP, int \fIrequest\fP, const\ char\ *\fIoptions\fP);
+.sp
+.in
+.hy
+.ad
+cc ... \-lpcp_gui
+.ft 1
+.SH DESCRIPTION
+These routines may be used to create a Performance Co-Pilot (PCP)
+archive ``on the fly'' to
+support ``record mode'' services for PMAPI client applications.
+.PP
+Each record mode ``session'' involves one or more
+PCP archive logs each created using a dedicated
+.BR pmlogger (1)
+process, with an overall Archive Folio format as understood by
+.BR pmafm (1),
+to name and collect all of the archive logs associated with
+a single recording session.
+.PP
+The
+.I pmRecordHost
+structure is used to maintain state information between the
+creator of the recording session and the associated
+.BR pmlogger
+process(es). The structure is defined as:
+.sp 0.5v
+.ft CW
+.nf
+.in +0.25i
+typedef struct {
+ FILE *f_config; /* caller writes pmlogger configuration here */
+ int fd_ipc; /* IPC channel to pmlogger */
+ char *logfile; /* full pathname for pmlogger error logfile */
+ pid_t pid; /* process id for pmlogger */
+ int status; /* exit status, \-1 if unknown */
+} pmRecordHost;
+.in -0.25i
+.fi
+.ft R
+.PP
+The routines are used in combination to create a recording session
+as follows.
+.IP 1. 4n
+Call
+.B pmRecordSetup
+to establish a new recording session. A new Archive Folio will be
+created using the name
+.IR folio ;
+if the file or directory
+.I folio
+already exists, or the file
+.I folio
+cannot be created, this is an error.
+The application that is creating the session is identified by
+.I creator
+(most often this would be the same as the global PMAPI application name,
+.IR pmProgname ).
+If the application knows how to create its own configuration file to replay
+the recorded session, then
+.I replay
+should be non-zero.
+.RS
+.PP
+.B pmRecordSetup
+returns a
+.I stdio
+stream onto
+which the application should write the text of the required
+replay configuration file, if any.
+.RE
+.IP 2.
+For each
+.I host
+that is to be included in the recording session, call
+.BR pmRecordAddHost .
+A new
+.I pmRecordHost
+structure is returned via
+.IR rhp .
+It is assumed that
+.BR pmcd (1)
+is running on
+.I host
+as this is how
+.BR pmlogger (1)
+will retrieve the required performance metrics.
+.RS
+.PP
+If this
+.I host
+is the default host for this recording session, then
+.I isdefault
+should be non-zero. This will ensure that the corresponding archive
+appears first in the PCP archive folio, and hence the tools used
+to replay the archive folio will make the correct determination of the
+archive associated with the default host.
+At most one
+.I host
+per recording session may be nominated as the default host.
+.PP
+The calling application should
+write the desired
+.B pmlogger
+configuration onto the
+.I stdio
+stream returned via the
+.I f_config
+field in the
+.I pmRecordHost
+structure.
+.RE
+.IP 3.
+Optionally add arguments to the command line that will be used
+to launch
+.BR pmlogger (1)
+by calling
+.B pmRecordControl
+with a
+.I request
+of
+.BR PM_REC_SETARG .
+The argument is passed via
+.I options
+and one call to
+.B pmRecordControl
+is required for each distinct argument.
+.RS
+.PP
+An argument may be added for a particular
+.B pmlogger
+instance
+identified by
+.IR rhp ,
+or if the
+.I rhp
+argument
+is NULL the argument is added for all
+.B pmlogger
+instances that will be launched in the current recording session.
+.PP
+Independent of any calls to
+.B pmRecordControl
+with a
+.I request
+of
+.BR PM_REC_SETARG ,
+each
+.B pmlogger
+instance will automatically be launched with the following arguments:
+.BR \-c ,
+.BR \-h ,
+.BR \-l ,
+.B \-x
+and the basename for the PCP archive log.
+.RE
+.IP 4.
+To commence the recording session, call
+.B pmRecordControl
+with a
+.I request
+of
+.BR PM_REC_ON ,
+and
+.I rhp
+must be NULL.
+This will launch one
+.BR pmlogger (1)
+process for each host in the recording session,
+and initialize the
+.IR fd_ipc ,
+.IR logfile ,
+.I pid
+and
+.I status
+fields in the associated
+.I pmRecordHost
+structure(s).
+.IP 5.
+To terminate a
+.B pmlogger
+instance
+identified by
+.IR rhp ,
+call
+.B pmRecordControl
+with a
+.I request
+of
+.BR PM_REC_OFF .
+If the
+.I rhp
+argument to
+.B pmRecordControl
+is NULL, the termination request is broadcast to all
+.B pmlogger
+processes in the current recording session.
+.RS
+.PP
+An informative dialog is generated directly by each
+.B pmlogger
+process and hence note the comments on the disposition of output from
+.B pmlogger
+below.
+.PP
+Alternatively,
+.B pmlogger
+can be started with options to limit the duration of logging, e.g. the
+.B \-T
+or
+.B \-s
+arguments, in which case there is no need to call
+.B pmRecordControl
+with a
+.I request
+of
+.B PM_REC_OFF
+and no dialog is generated.
+.RE
+.IP 6.
+To display the current status of the
+.B pmlogger
+instance identified by
+.IR rhp ,
+call
+.B pmRecordControl
+with a
+.I request
+of
+.BR PM_REC_STATUS .
+If the
+.I rhp
+argument to
+.B pmRecordControl
+is NULL, the status request is broadcast to all
+.B pmlogger
+processes in the current recording session.
+.RS
+.PP
+The display is generated directly by each
+.B pmlogger
+process and hence note the comments on the disposition of output from
+.B pmlogger
+below.
+.RE
+.IP 7.
+To detach a
+.B pmlogger
+instance identified by
+.IR rhp
+and allow it to continue independent of
+the application that launched the recording session, call
+.B pmRecordControl
+with a
+.I request
+of
+.BR PM_REC_DETACH .
+If the
+.I rhp
+argument to
+.B pmRecordControl
+is NULL, the detach request is broadcast to all
+.B pmlogger
+processes in the current recording session.
+.RS
+.PP
+An informative dialog is generated directly by each
+.B pmlogger
+process and hence note the comments on the disposition of output from
+.B pmlogger
+below.
+.RE
+.PP
+The calling application should not close any of the returned
+.I stdio
+streams; this will be done by
+.B pmRecordControl
+when recording is commenced.
+.PP
+Once
+.B pmlogger
+has been started for a recording session, then
+.B pmlogger
+will assume responsibility for any dialog with the user in the event
+that the application that launched the recording session should
+exit, particularly without terminating the recording session.
+.PP
+By default, information and dialogs from
+.B pmlogger
+will be displayed using
+.BR pmquery (1)
+on the assumption that most applications wishing to launch
+a recording session are GUI-based. In the event that
+.B pmquery
+fails to display the information (for example, because the
+.B DISPLAY
+environment variable is not set),
+.B pmlogger
+will write on its own
+.I stderr
+stream (\c
+.B not
+the
+.I stderr
+stream of the launching process);
+the output will be assigned to the
+.I XXXXXX.host.\fBlog\fP
+file described in the FILES section below.
+For convenience, the full pathname to this file is provided via the
+.I logfile
+field in the
+.I pmRecordHost
+structure.
+.PP
+If the
+.I options
+argument to
+.B pmRecordControl
+is not NULL, this string may be
+used to pass additional arguments to
+.BR pmquery (1)
+in those cases where a dialog is to be displayed. One use of this
+capability would be to
+provide a
+.B \-geometry
+string to control the placement of the dialog.
+.PP
+Premature termination of a launched
+.B pmlogger
+process may be determined using the
+.I pmRecordHost
+structure,
+by calling
+.BR select (2)
+on the
+.I fd_ipc
+field
+or polling the
+.I status
+field that will contain the termination status from
+.BR waitpid (2)
+if known, else \-1.
+.SH SEE ALSO
+.BR pmafm (1),
+.BR pmlogger (1),
+.BR pmquery (1)
+and
+.BR PMAPI (3).
+.SH FILES
+These routines create a number of files in the
+.B "same directory"
+as the
+.I folio
+file named in the call to
+.BR pmRecordSetup .
+In all cases, the ``XXXXXX'' component is the result of
+calling
+.BR mktemp (3).
+.TP 10
+.I XXXXXX
+If
+.I replay
+is non-zero, this is the creator's replay configuration file, else
+an empty control file, used to guarantee uniqueness.
+.PD 0
+.TP
+.I folio
+The PCP Archive Folio, suitable for use with
+.BR pmafm (1).
+.TP
+.I XXXXXX.host.\fBconfig\fP
+The
+.BR pmlogger (1)
+configuration for each
+.I host
+\- if the same
+.I host
+is used in different calls to
+.B pmRecordAddHost
+within the same recording session
+then one of the letters ``a'' through ``z'' will
+be appended to the ``XXXXXX'' part of all associated file names to ensure
+uniqueness.
+.TP
+.I XXXXXX.host.\fBlog\fP
+.I stdout
+and
+.I stderr
+for the
+.BR pmlogger (1)
+instance for each
+.IR host .
+.TP
+.I XXXXXX.host.\fR{\fB0\fP,\fBmeta\fP,\fBindex\fP}
+The files comprising a single PCP archive for each
+.IR host .
+.SH DIAGNOSTICS
+.PD
+.PP
+.B pmRecordSetup
+may return
+.B NULL
+in the event of an error.
+Check
+.I errno
+for the real cause, but the value
+.B EINVAL
+typically means that the order of calls to these routines is
+not correct (there is obvious state associated with the current
+recording session that is maintained across calls to these routines).
+For example
+the following calls would produce this
+.B EINVAL
+error;
+calling
+.B pmRecordControl
+before calling
+.B pmRecordAddHost
+at least once, or calling
+.B pmRecordAddHost
+before calling
+.BR pmRecordSetup .
+.PP
+.B pmRecordControl
+and
+.B pmRecordAddHost
+both return 0 on success, else a value less than 0 suitable for
+decoding with
+.BR pmErrStr (3)
+on failure.
+The value
+.B \-EINVAL
+has the same interpretation as
+.I errno
+being set to
+.B EINVAL
+as described above.
+.PP
+.B pmRecordControl
+will return
+.B PM_ERR_IPC
+if the associated
+.B pmlogger
+process has already exited.