blob: 510f81ff005f82281338ca7eacd19d5ccb3d11b3 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- 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".
-->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU gprof: Assumptions</title>
<meta name="description" content="GNU gprof: Assumptions">
<meta name="keywords" content="GNU gprof: Assumptions">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Inaccuracy.html#Inaccuracy" rel="up" title="Inaccuracy">
<link href="How-do-I_003f.html#How-do-I_003f" rel="next" title="How do I?">
<link href="Sampling-Error.html#Sampling-Error" rel="prev" title="Sampling Error">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Assumptions"></a>
<div class="header">
<p>
Previous: <a href="Sampling-Error.html#Sampling-Error" accesskey="p" rel="prev">Sampling Error</a>, Up: <a href="Inaccuracy.html#Inaccuracy" accesskey="u" rel="up">Inaccuracy</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>
<hr>
<a name="Estimating-children-Times"></a>
<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>
<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>
<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>&rsquo;s
<code>children</code> time, by assumption.
</p>
<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>.
</p>
<p>We hope some day to put more complete data into <samp>gmon.out</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.
</p>
</body>
</html>