blob: bb3188cfe87aaa40d62116eb96a5842cc2d1fec3 [file] [log] [blame]
<html lang="en">
<head>
<title>Assumptions - 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="Inaccuracy.html#Inaccuracy" title="Inaccuracy">
<link rel="prev" href="Sampling-Error.html#Sampling-Error" title="Sampling Error">
<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="Assumptions"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="Sampling-Error.html#Sampling-Error">Sampling Error</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Inaccuracy.html#Inaccuracy">Inaccuracy</a>
<hr>
</div>
<h3 class="section">6.2 Estimating <code>children</code> Times</h3>
<p>Some of the figures in the call graph are estimates&mdash;for example, the
<code>children</code> time values and all the time figures in caller and
subroutine lines.
<p>There is no direct information about these measurements in the profile
data itself. Instead, <code>gprof</code> estimates them by making an assumption
about your program that might or might not be true.
<p>The assumption made is that the average time spent in each call to any
function <code>foo</code> is not correlated with who called <code>foo</code>. If
<code>foo</code> used 5 seconds in all, and 2/5 of the calls to <code>foo</code> came
from <code>a</code>, then <code>foo</code> contributes 2 seconds to <code>a</code>'s
<code>children</code> time, by assumption.
<p>This assumption is usually true enough, but for some programs it is far
from true. Suppose that <code>foo</code> returns very quickly when its argument
is zero; suppose that <code>a</code> always passes zero as an argument, while
other callers of <code>foo</code> pass other arguments. In this program, all the
time spent in <code>foo</code> is in the calls from callers other than <code>a</code>.
But <code>gprof</code> has no way of knowing this; it will blindly and
incorrectly charge 2 seconds of time in <code>foo</code> to the children of
<code>a</code>.
<!-- FIXME - has this been fixed? -->
<p>We hope some day to put more complete data into <samp><span class="file">gmon.out</span></samp>, so that
this assumption is no longer needed, if we can figure out how. For the
novice, the estimated figures are usually more useful than misleading.
</body></html>