\documentclass[dvipdfm,11pt]{article}
\usepackage[dvipdfm]{hyperref} % Upgraded url package
\parskip=.1in
\begin{document}
\markright{MPICH Logging}
\title{MPICH Logging\\
Version 0.1\\
DRAFT of \today\\
Mathematics and Computer Science Division\\
Argonne National Laboratory}
\author{David Ashton}
\maketitle
\cleardoublepage
\pagenumbering{arabic}
\pagestyle{headings}
\section{Introduction}
\label{sec:introduction}
This manual assumes that MPICH has already been installed. For
instructions on how to install MPICH, see the MPICH Installer's Guide,
or the README in the top-level MPICH directory. This manual will
explain how the internal logging macros are generated and how the user
can generate log files viewable in Jumpshot.
\section{Configuring mpich to create log files}
\label{sec:configuring}
When users run configure they can specify logging options. There are three
configure options to control logging.
\begin{description}
\item[\texttt{--enable-timing=<timing\_type>}]\mbox{}\\
Add this option to enable timing. The two options for timing\_type are
\texttt{log} and \texttt{log\_detailed}. The \texttt{log} option will log
only the MPI functions. The
\texttt{log\_detailed} will log every function in mpich. This option gives
fine grained logging information and also creates large log files. It must
be used in conjunction with a timer-type that can log very short intervals
on the order of 100's of nanoseconds.
\item[\texttt{--with-logging=<logger>}]\mbox{}\\
Specify the logging library to use. Currently the only logger option is \texttt{rlog}.
\item[\texttt{--enable-timer-type=<timer\_type>}]\mbox{}\\
Specify the timer type. The options are
\begin{itemize}
\item \texttt{gethrtime} -
Solaris timer (Solaris systems only)
\item \texttt{clock\_gettime} -
Posix timer (where available)
\item \texttt{gettimeofday} -
Most Unix systems
\item \texttt{linux86\_cycle} -
Linux x86 cycle counter*
\item \texttt{linuxalpha\_cycle} -
Like linux86\_cycle, but for Linux Alpha*
\item \texttt{gcc\_ia64\_cycle} -
IA64 cycle counter*
\end{itemize}
* Note that CPU cycle counters count cycles, not elapsed time.
Because processor frequencies are variable, especially with modern
power-aware hardware, these are not always reliable for timing and so
should only be used if you're sure you know what you're doing.
\end{description}
Here is an example:
\begin{verbatim}
mpich/configure
--enable-timing=log
--with-logging=rlog
--enable-timer-type=gettimeofday
...
\end{verbatim}
\section{Generating log files}
\label{sec:genlogs}
Run your mpi application to create intermediate \texttt{.irlog} files.
\begin{verbatim}
mpicc myapp.c -o myapp
mpiexec -n 3 myapp
\end{verbatim}
There will be .irlog files created for each process:
\begin{verbatim}
log0.irlog
log1.irlog
log2.irlog
\end{verbatim}
\section{RLOG tools}
\label{sec:tools}
For performance reasons each process produces a local intermediate log file
that needs to be merged into a single rlog file. Use the rlog tools to merge
the \texttt{.irlog} files into an \texttt{.rlog} file. The rlog tools are
found in \texttt{mpich\_build/src/util/logging/rlog}. Currently they are not
copied to the install directory.
\begin{description}
\item[\texttt{irlog2rlog}]\mbox{}\\
This tool combines the intermediate \texttt{.irlog} files into a single
\texttt{.rlog} file. The usage is: ``\texttt{irlog2rlog outname.rlog
input0.irlog input1.irlog ...}'' A shortcut is provided: ``\texttt{irlog2rlog
outname.rlog <num\_files>}''. Execute \texttt{irlog2rlog} without any
parameters to see the usage options.
\item[\texttt{printrlog}]\mbox{}\\
This tool prints the contents of an \texttt{.rlog} file.
\item[\texttt{printirlog}]\mbox{}\\
This tool prints the contents of an \texttt{.irlog} file.
\end{description}
Continuing the example from the previous section:
\begin{verbatim}
irlog2rlog myapp.rlog 3
\end{verbatim}
will convert \texttt{log0.irlog}, \texttt{log1.irlog} and \texttt{log2.irlog}
to \texttt{myapp.rlog}.
\section{Viewing log files}
This section describes how to view a log file
\texttt{.rlog} files can be printed from a command shell using the
\texttt{printrlog} tool but the more interesting way to view the log files
is from Jumpshot. Jumpshot displays slog2 files and has a built in converter
to convert \texttt{.rlog} files to \texttt{.slog2} files. Start Jumpshot and
open your \texttt{.rlog} file. Jumpshot will ask you if you want to convert
the file and you say yes.
\section{Logging state code generation}
\label{sec:genstates}
This section can be skipped by users. It describes the internal scripts used
to develop the logging macros.
This is how the \texttt{maint/genstates} script works:
\begin{enumerate}
\item \texttt{autogen.sh} creates \texttt{genstates} from
\texttt{genstates.in} replacing \texttt{@PERL@} with the appropriate path to
perl and then runs \texttt{genstates}.
\item \texttt{genstates} finds all \texttt{.i}, \texttt{.h} and \texttt{.c} files
in the mpich directory tree, searches for \texttt{\_STATE\_DECL} in each
file and builds a list of all the MPID\_STATEs. It validates that the states
start in a \texttt{\_STATE\_DECL} statement, followed by a \texttt{FUNC\_ENTER}
statement, and then at least one \texttt{FUNC\_EXIT} statement. Errors are printed
out if the code does not follow this format except for macros. State declarations
in macros are assumed to be correct.
\item \texttt{genstates} finds all the \texttt{describe\_states.txt}
files anywhere in the mpich tree. \texttt{describe\_states.txt} files are
optional and are used to set the output name of the state and its associated
color.
\item The \texttt{describe\_states.txt} file format is this:
\begin{verbatim}
MPID_STATE_XXX <user string for the state> <optional rgb color>
\end{verbatim}
Here is an example line:
\begin{verbatim}
MPID_STATE_MPI_SEND MPI_Send 0 0 255
\end{verbatim}
If you don't specify a state in a \texttt{describe\_states.txt} file then
the state user name will be automatically created by stripping off the
\texttt{MPID\_STATE\_} prefix and the color will be assigned a random value.
\item \texttt{genstates} ouputs \texttt{mpich/src/include/mpiallstates.h}
with this \texttt{enum} in it:
\begin{verbatim}
enum MPID_TIMER_STATE
{
MPID_STATE_XXX,
...
};
\end{verbatim}
\item \texttt{genstates} outputs
\texttt{mpich/src/util/logging/describe\_states.c} with the
\texttt{MPIR\_Describe\_timer\_states()} function in it. Currently, only
the rlog version of \texttt{MPIR\_Describe\_timer\_states()} is generated.
\end{enumerate}
\end{document}