[GHC] #15938: Hadrian's recompilation check is extremely slow

GHC ghc-devs at haskell.org
Fri Dec 7 09:43:22 UTC 2018


#15938: Hadrian's recompilation check is extremely slow
-------------------------------------+-------------------------------------
        Reporter:  bgamari           |                Owner:  alpmestan
            Type:  bug               |               Status:  patch
        Priority:  high              |            Milestone:  8.8.1
       Component:  Build System      |              Version:  8.6.2
  (Hadrian)                          |
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D5412
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Alp Mestanogullari <alpmestan@…>):

 In [changeset:"eee1b61f85d949aa7c4bc496b5579cf759d1861e/ghc" eee1b61/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="eee1b61f85d949aa7c4bc496b5579cf759d1861e"
 hadrian: optimise Rules.Compile

 Previously, as reported in #15938, resuming a build "in the middle",
 e.g when building _build/stage1/libraries/base/, hadrian would take up
 to a whole minute to get started doing actual work, building code.

 This was mostly due to a big enumeration that we do in Rules.hs, to
 generate all the possible patterns for object files for 1) all ways, 2)
 all packages and 3) all stages. Since rule enumeration is always
 performed, whatever the target, we were always paying this cost, which
 seemed to grow bigger the farther in the build we stopped and were
 resuming from.

 Instead, this patch borrows the approach that we took for Rules.Library
 in https://github.com/snowleopard/hadrian/pull/571, which exposes all the
 relevant object files under as few catch-all rules as possible (8 here),
 and parses all the information we need out of the object's path.

 The concrete effect of this patch that I have observed is to reduce the
 45-60 seconds pause to <5 seconds. Along with the Shake performance
 improvements that Neil mentions in #15938, most of the pause should
 effectively disappear.

 Reviewers: snowleopard, bgamari, goldfire

 Reviewed By: snowleopard

 Subscribers: rwbarton, carter

 GHC Trac Issues: #15938

 Differential Revision: https://phabricator.haskell.org/D5412
 }}}

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


More information about the ghc-tickets mailing list