[Haskell-cafe] Interpreting profiling results
Jean-Marie Gaillourdet
jmg at gaillourdet.net
Tue Feb 16 09:45:38 EST 2010
Hi,
Daniel Fischer wrote:
>> total alloc = 165,728 bytes (excludes profiling overheads)
>>
>> COST CENTRE MODULE %time %alloc
>>
>> CAF GHC.Handle 0.0 10.7
>> CAF Text.Read.Lex 0.0 2.1
>> CAF GHC.Read 0.0 1.2
>> square Main 0.0 2.8
>> solve Main 0.0 1.3
>> show_aVx Main 0.0 3.7
>> readsPrec_aYF Main 0.0 60.6
>> main Main 0.0 9.6
>> genNums Main 0.0 5.0
>> cell Main 0.0 1.2
>>
>>
>>
>> individual inherited
>> COST CENTRE MODULE
>> no. entries %time %alloc %time %alloc
>>
>> MAIN MAIN
>> 1 0 0.0 0.3 0.0 100.0
>> main Main
>> 186 1 0.0 9.6 0.0 85.6
>> show_aVx Main
>> 196 2 0.0 3.7 0.0 3.7
>> cell Main
>> 197 16 0.0 0.0 0.0 0.0
>> solve Main
>> 188 5 0.0 1.3 0.0 11.8
>> genNums Main
>> 189 8 0.0 5.0 0.0 10.4
>> square Main
>> 194 88 0.0 2.8 0.0 3.2
>> cell Main
>> 195 16 0.0 0.4 0.0 0.4
>> col Main
>> 192 4 0.0 0.7 0.0 1.1
>> cell Main
>> 193 16 0.0 0.4 0.0 0.4
>> row Main
>> 190 4 0.0 0.7 0.0 1.1
>> cell Main
>> 191 16 0.0 0.4 0.0 0.4
>> readsPrec_aYF Main
>> 187 3 0.0 60.6 0.0 60.6
>> CAF GHC.Read
>> 151 1 0.0 1.2 0.0 1.2
>> CAF Text.Read.Lex
>> 144 8 0.0 2.1 0.0 2.1
>> CAF GHC.Handle
>> 128 4 0.0 10.7 0.0 10.7
>> CAF GHC.Conc
>> 127 1 0.0 0.0 0.0 0.0
>>
>> Does the column 'entries' represent the number of times the function
>> was called?
>
> Number of times it was 'entered', not quite the same as the number of times it was called.
> I think (Warning: speculation ahead, I don't *know* how the profiles are generated) it's
> thus:
> Say you call a function returning a list. One call, first entry. It finds the beginning of
> the list, the first k elements and hands them to the caller. Caller processes these, asks
> "can I have more, or was that it?". Same call, second entry: f looks for more, finds the
> next m elements, hands them to caller. Caller processes. Repeat until whatever happens
> first, caller doesn't ask whether there's more or callee finds there's nothing more (or
> hits bottom).
>
Warning: speculation ahead, but is based on my knowledge on other profilers.
Many profilers work statistically, they interrupt a program at more less
random (or equal) intervals and inspect the stack, whick is of course
quite difficult in Haskell as far as I understand it. I have interpreted
the entries column as an indication for the amount of "profile
interrupts" which happened when a function f was on top of the stack,
whatever that means in Haskell.
The manual of GHC 6.10.4, chapter 5 states:
>The actual meaning of the various columns in the output is:
>
>entries
>
> The number of times this particular point in the call graph was
> entered.
So for me the question remains open, is "entries" a precisely counted
value or a statistically determined one?
Best regards,
Jean
More information about the Haskell-Cafe
mailing list