[Haskell-cafe] methods/tools for reading/presenting (time/allocation) profiling information?

Olaf Klinke olf at aatal-apotheke.de
Fri Nov 26 22:01:06 UTC 2021


> Dear Cafe,
> 
> with +RTS -p -RTS, the resulting .prof file
> shows (in the second part) what the expensive functions are.
> (counting sections as GHC docs do -
> first part gives program name and options)
> 
> Often, that's useful, but sometimes, this info does not surprise me -
> some things just don't have an easy implementation.
> For those, I want to find out who calls them -
> to possibly replace some of these calls
> with a cheaper implementation (that is only valid
> because the caller knows something that the callee does not)
> 
> Is there some automation for getting this information?
> I am not even sure how to formalize what I want.
> Perhaps, for the first N heavy cost centers (SCCs),
> a suitably ordered list of their callers (that inherit the cost)?
> 
> The data is in the third (long, detailed) part of the .prof file
> but I find it hard to process (in that form). It represents
> the call hiearchy by indentation (first column) and adjacency (of rows)
> but this goes out the window as soon as I grep or sort the rows.
> 
> The JSON output format seems the way to go
> https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/profiling.html#json-profile-format
> .
> Yeah, I should probably just aeson it and then walk the tree.
> I still wanted to ask for advice first, or references
> to existing work. Any pointers appreciated.
> 
> - J.
> 

Profiteur has served me well in this regard.
It shows me what top-level functions eat most of the execution times,
and which sub-functions have the biggest share thereof, etc. 
All in a nice interactive browser interface. 

https://hackage.haskell.org/package/profiteur

Olaf



More information about the Haskell-Cafe mailing list