[GHC] #9221: (super!) linear slowdown of parallel builds on 40 core machine

GHC ghc-devs at haskell.org
Fri Jul 31 10:53:15 UTC 2015


#9221: (super!) linear slowdown of parallel builds on 40 core machine
-------------------------------------+-------------------------------------
        Reporter:  carter            |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  high              |               Milestone:  7.12.1
       Component:  Compiler          |                 Version:  7.8.2
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  Compile-time      |  Unknown/Multiple
  performance bug                    |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:  #910              |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by nh2):

 Replying to [comment:23 ezyang]:
 > I was chatting with one of my colleagues about this problem recently,
 and they said something very provocative: if GHC is not scaling because
 there is some global mutable state (e.g. the NameCache) ...
 >
 > Do people agree with this viewpoint? Disagree?

 I disagree. Threads should almost always be more efficient to use as they
 allow to efficiently/easily share resources when it makes things faster,
 but that doesn't mean that we have to share all the things. Processes
 force us to not share anything. If building is faster with separate
 processes, then we should be able to achieve the same speed with threads
 by simply not sharing that thing that makes it slow and that processes
 force us to not share.

 However, I wouldn't be surprised if this isn't even the problem here.

 Replying to [comment:28 slyfox]:
 > If perf does not lie most of the time is spent cycling over sleeping
 kernel threads

 This sounds much more like the problem.

 If I had to make a guess (and based on the very limited look I had into
 this issue last year) it feels like we are accidentally busy polling
 something somewhere.

 When I run some non-build Haskell stuff with `-RTS +N18` on the current
 generation of 18 core AWS instances, with many more Haskell threads than
 needed for building a 200 module project, and with shorter thread life
 times than in this case (e.g. let's say building a module takes around 0.5
 seconds), that stuff scales pretty nicely, much better than ghc's `--make`
 scales here. This makes me think that we might be simply doing something
 wrong in the parallel upsweep code, and that the rest (compiler, runtime
 etc.) is doing quite OK.

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


More information about the ghc-tickets mailing list