[GHC] #10007: Fix misattribution of Cost Centre profiles to lintAnnots

GHC ghc-devs at haskell.org
Thu Dec 15 18:07:39 UTC 2016


#10007: Fix misattribution of Cost Centre profiles to lintAnnots
-------------------------------------+-------------------------------------
        Reporter:  thoughtpolice     |                Owner:  simonmar
            Type:  bug               |               Status:  new
        Priority:  high              |            Milestone:  8.2.1
       Component:  Profiling         |              Version:  7.10.1-rc1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Incorrect result  |  Unknown/Multiple
  at runtime                         |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #9961,#5654       |  Differential Rev(s):  Phab:D616
       Wiki Page:                    |  Phab:D636
-------------------------------------+-------------------------------------

Comment (by Ben Gamari <ben@…>):

 In [changeset:"394231b301efb6b56654b0a480ab794fe3b7e4db/ghc"
 394231b3/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="394231b301efb6b56654b0a480ab794fe3b7e4db"
 Fix cost-centre-stacks bug (#5654)

 This fixes some cases of wrong stacks being generated by the profiler.
 For background and details on the fix see
 `Note [Evaluating functions with profiling]` in `rts/Apply.cmm`.

 This does have an impact on allocations for some programs when
 profiling.  nofib results:

 ```
    k-nucleotide          +0.0%     +8.8%    +11.0%    +11.0%      0.0%
          puzzle          +0.0%    +12.5%     0.244     0.246      0.0%
       typecheck           0.0%     +8.7%    +16.1%    +16.2%      0.0%
 ------------------------------------------------------------------------
 --------
             Min          -0.0%     -0.0%    -34.4%    -35.5%    -25.0%
             Max          +0.0%    +12.5%    +48.9%    +49.4%    +10.6%
  Geometric Mean          +0.0%     +0.6%     +2.0%     +1.8%     -0.3%

 ```

 But runtimes don't seem to be affected much, and the examples I looked
 at were completely legitimate.  For example, in puzzle we have this:

 ```
 position :: ItemType -> StateType ->  BankType
 position Bono = bonoPos
 position Edge = edgePos
 position Larry = larryPos
 position Adam = adamPos
 ```

 where the identifiers on the rhs are all record selectors.  Previously
 the profiler gave a stack that looked like

 ```
   position
   bonoPos
   ...
 ```

 i.e. `bonoPos` was at the same level of the call stack as `position`,
 but now it looks like

 ```
   position
    bonoPos
    ...
 ```

 I used the normaliser from the testsuite to diff the profiling output
 from other nofib programs and they all looked better.

 Test Plan:
 * the broken test passes
 * validate
 * compiled and ran all of nofib, measured perf, diff'd several .prof
 files

 Reviewers: niteria, erikd, austin, scpmw, bgamari

 Reviewed By: bgamari

 Subscribers: thomie

 Differential Revision: https://phabricator.haskell.org/D2804

 GHC Trac Issues: #5654, #10007
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10007#comment:20>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list