blob: 71734ac9fc8249df67ea7c19404e5b02dbe3629d [file] [log] [blame]
<html lang="en">
<head>
<title>Flat Profile - GNU gprof</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="GNU gprof">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Output.html#Output" title="Output">
<link rel="next" href="Call-Graph.html#Call-Graph" title="Call Graph">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the gprof profiler of the GNU system.
Copyright (C) 1988, 1992, 1997, 1998, 1999, 2000, 2001, 2003,
2007, 2008, 2009 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. A copy of the license is included in the
section entitled ``GNU Free Documentation License''.
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Flat-Profile"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Call-Graph.html#Call-Graph">Call Graph</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Output.html#Output">Output</a>
<hr>
</div>
<h3 class="section">5.1 The Flat Profile</h3>
<p><a name="index-flat-profile-1"></a>
The <dfn>flat profile</dfn> shows the total amount of time your program
spent executing each function. Unless the &lsquo;<samp><span class="samp">-z</span></samp>&rsquo; option is given,
functions with no apparent time spent in them, and no apparent calls
to them, are not mentioned. Note that if a function was not compiled
for profiling, and didn't run long enough to show up on the program
counter histogram, it will be indistinguishable from a function that
was never called.
<p>This is part of a flat profile for a small program:
<pre class="smallexample"> Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
33.34 0.02 0.02 7208 0.00 0.00 open
16.67 0.03 0.01 244 0.04 0.12 offtime
16.67 0.04 0.01 8 1.25 1.25 memccpy
16.67 0.05 0.01 7 1.43 1.43 write
16.67 0.06 0.01 mcount
0.00 0.06 0.00 236 0.00 0.00 tzset
0.00 0.06 0.00 192 0.00 0.00 tolower
0.00 0.06 0.00 47 0.00 0.00 strlen
0.00 0.06 0.00 45 0.00 0.00 strchr
0.00 0.06 0.00 1 0.00 50.00 main
0.00 0.06 0.00 1 0.00 0.00 memcpy
0.00 0.06 0.00 1 0.00 10.11 print
0.00 0.06 0.00 1 0.00 0.00 profil
0.00 0.06 0.00 1 0.00 50.00 report
...
</pre>
<p class="noindent">The functions are sorted first by decreasing run-time spent in them,
then by decreasing number of calls, then alphabetically by name. The
functions &lsquo;<samp><span class="samp">mcount</span></samp>&rsquo; and &lsquo;<samp><span class="samp">profil</span></samp>&rsquo; are part of the profiling
apparatus and appear in every flat profile; their time gives a measure of
the amount of overhead due to profiling.
<p>Just before the column headers, a statement appears indicating
how much time each sample counted as.
This <dfn>sampling period</dfn> estimates the margin of error in each of the time
figures. A time figure that is not much larger than this is not
reliable. In this example, each sample counted as 0.01 seconds,
suggesting a 100 Hz sampling rate.
The program's total execution time was 0.06
seconds, as indicated by the &lsquo;<samp><span class="samp">cumulative seconds</span></samp>&rsquo; field. Since
each sample counted for 0.01 seconds, this means only six samples
were taken during the run. Two of the samples occurred while the
program was in the &lsquo;<samp><span class="samp">open</span></samp>&rsquo; function, as indicated by the
&lsquo;<samp><span class="samp">self seconds</span></samp>&rsquo; field. Each of the other four samples
occurred one each in &lsquo;<samp><span class="samp">offtime</span></samp>&rsquo;, &lsquo;<samp><span class="samp">memccpy</span></samp>&rsquo;, &lsquo;<samp><span class="samp">write</span></samp>&rsquo;,
and &lsquo;<samp><span class="samp">mcount</span></samp>&rsquo;.
Since only six samples were taken, none of these values can
be regarded as particularly reliable.
In another run,
the &lsquo;<samp><span class="samp">self seconds</span></samp>&rsquo; field for
&lsquo;<samp><span class="samp">mcount</span></samp>&rsquo; might well be &lsquo;<samp><span class="samp">0.00</span></samp>&rsquo; or &lsquo;<samp><span class="samp">0.02</span></samp>&rsquo;.
See <a href="Sampling-Error.html#Sampling-Error">Statistical Sampling Error</a>,
for a complete discussion.
<p>The remaining functions in the listing (those whose
&lsquo;<samp><span class="samp">self seconds</span></samp>&rsquo; field is &lsquo;<samp><span class="samp">0.00</span></samp>&rsquo;) didn't appear
in the histogram samples at all. However, the call graph
indicated that they were called, so therefore they are listed,
sorted in decreasing order by the &lsquo;<samp><span class="samp">calls</span></samp>&rsquo; field.
Clearly some time was spent executing these functions,
but the paucity of histogram samples prevents any
determination of how much time each took.
<p>Here is what the fields in each line mean:
<dl>
<dt><code>% time</code><dd>This is the percentage of the total execution time your program spent
in this function. These should all add up to 100%.
<br><dt><code>cumulative seconds</code><dd>This is the cumulative total number of seconds the computer spent
executing this functions, plus the time spent in all the functions
above this one in this table.
<br><dt><code>self seconds</code><dd>This is the number of seconds accounted for by this function alone.
The flat profile listing is sorted first by this number.
<br><dt><code>calls</code><dd>This is the total number of times the function was called. If the
function was never called, or the number of times it was called cannot
be determined (probably because the function was not compiled with
profiling enabled), the <dfn>calls</dfn> field is blank.
<br><dt><code>self ms/call</code><dd>This represents the average number of milliseconds spent in this
function per call, if this function is profiled. Otherwise, this field
is blank for this function.
<br><dt><code>total ms/call</code><dd>This represents the average number of milliseconds spent in this
function and its descendants per call, if this function is profiled.
Otherwise, this field is blank for this function.
This is the only field in the flat profile that uses call graph analysis.
<br><dt><code>name</code><dd>This is the name of the function. The flat profile is sorted by this
field alphabetically after the <dfn>self seconds</dfn> and <dfn>calls</dfn>
fields are sorted.
</dl>
</body></html>