fprof(1)


fprof -- configure, start, control or analyze the results of a flow-profile experiment

Synopsis

fprof -C[Logging=on|off,][StartState=on|off,][Accuracy=accurate|normal,] [LogPrefix=pathname]

fprof -s [-C[Logging=on|off,][StartState=on|off,][Accuracy=accurate|normal,] [LogPrefix=pathname]] command-line

fprof [-o|-O] [-m] log [log] . . .

fprof [-i] [log] . . .

Description

fprof is the controlling program for the flow profiling features. Flow profiling is a form of tracing used to analyze performance and locality of reference of text.

Profiling revolves around running experiments. An experiment consists of running the program that you want to analyze with profiling compiled into the program. For flow profiling, the -qf option must be given to cc(1) or CC(1C++). When a program being profiled is running (i.e., a flow-profile experiment is running), the current time is recorded every time a function is called and every time it exits.

There are three different uses for fprof:

The first 2 uses are optional. If the default configuration is the way you want it and the experiment needs no fine control, you can just compile your program with flow profiling, run the program and analyze the results. If this is all you need, viewing the results of experiments is described below.

Setting up flow-profile experiment parameters is accomplished in one of three ways: system-wide configuration files, environment variables or per-experiment command-line arguments. There are four configuration parameters:

Logging
Controls whether any logging will be performed on programs that were compiled for flow-profiling. By default, logging is on.

StartState
Controls whether the logging state is on when the experiment is begun. (The logging state is on by default.) If StartState is set to off, logging may be turned on while the program is running. The only reason to use this parameter is to preclude start-up information from a flow-profile log.

Accuracy
Set to either accurate or normal. Accurate logs write time stamp information accurate to the microsecond (at least). Normal logs will contain timestamps that are accurate to 1/100 of a second. By default, the accuracy is normal. Note that due to system architecture constraints, only programs running with root privilege may use accurate timestamping.

LogPrefix
Allows you to choose where you would like the logs to be stored. When a program is begun that has logging turned on, an output file is created with the name LogPrefix.pid (where pid is the process-id of the running program). By default, LogPrefix is set to /tmp/out. This means that for a process with a pid of 12, its log will be the file /tmp/out.12.

Setting up system-wide configuration parameters requires the root privilege and is done with fprof -C (with no -s option). Once this is accomplished all experiments will use these parameters. The configuration is stored in the file /usr/ccs/lib/fprof.cfg.

The system-wide configuration may be superseded through the environment variables FprofLogging, FprofStartState, FprofAccuracy and FprofLogPrefix.

A third way to specify the configuration for a flow-profile experiment is to start the experiment using fprof -s. This sets the four environment variables above and executes the command-line specified in its argument.

Controlling the activity of a running experiment is accomplished using the third form of the command shown above. Control, in this case, means starting and stopping logging or putting marks in the log.

To specify which running processes are to be controlled, a set of log files are given as arguments (each log file corresponds to a process). The -o option sets the logging state to on. The -O option sets the logging state to off. The -m option places a mark record into the log at its current point.

Viewing the results of experiments is done using the last form of fprof. This form sets up an interactive shell for the user. The interface is that of the ksh(1) command, but more commands are available. These commands can be used like any shell commands, that is, they can be piped, redirected, etc.

A set of logs may be specified on the command-line. This is equivalent to starting fprof with no arguments and giving an open command to the interpreter with those logs (see open below). The -i option requests that an info (see below) command be done on the specified logs. It is common practice to call fprof -i right after an experiment to make sure that the log turned out the way you expected it to.

The available commands are:

open log [log]...
Takes a list of logs and opens them for reading.

info
Writes information about the open logs to the standard output.

close
Closes logs opened by an open command.

output [count]
Writes count records to the standard output. If count is not supplied, 10 records are written.

output_until_mark
Writes records to the standard output until it reaches the end of all logs or until it sees a marked entry.

search regular-expression
Searches for the next log entry whose function call matches the regular expression and writes the record to the standard output.

bracket
Writes all records between the previous mark and the next mark to the standard output.

rewind
Returns to the beginning of the first log.

seekmark [-]
Seeks to the next (or previous if the '-' is present) mark.

count [time1 [time2]]
Gathers statistics on any subset of the log (or the whole log); there is no output. Time may be specified in marks or in absolute numbers. Each may be specified relatively or absolutely as well. For example, count -m-1 -m+1 would gather statistics from the previous mark to the next; count -1000 +1000 would gather statistics from the previous millisecond to the next; count 1000 would gather statistics from one millisecond into the log until the end.

stats
Prints out call statistics gathered by count. It shows each function called, how many times it was called, how much time it spent running (time at top of stack) and how much time it or any function it called spent running (time on stack).

callers regular-expression [regular-expression]...
Prints out caller statistics gathered by count. For each function that matches any of the regular expressions, print out the percentage of:

For example, assume there is a function x that is consuming a lot of time on the stack (not necessarily on top of the stack), callers will tell you in its 3rd column how much of that time was spent from a call from each other function.

callees regular-expression [regular-expression]...
Prints out callee statistics gathered by count. This is similar to callers. Used when one notices that a certain function is spending a lot of time somewhere on the stack.
The term compile is often associated with flow-profile logs. Compiling a log is analogous to compiling a program. It means that the log is converted to a format that can be read faster. The first time a log is read, by either fprof or lrt_scan(1) (which analyzes the results of a flow-profiling experiment for locality of reference tuning), the log is compiled so that it can be read faster the next time. The one exception to this rule is that if the log is read while the experiment is still running (this is perfectly acceptable), the log is not compiled.

Files

/usr/ccs/lib/fprof.cfg system-wide configuration file

References

CC(1C++), cc(1), ksh(1), lprof(1), lrt_scan(1) prof(1), regcmp(3G)
30 January 1998
© 1998 The Santa Cruz Operation, Inc. All rights reserved.