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

GHC ghc-devs at haskell.org
Sun Nov 1 12:59:37 UTC 2015


#9221: (super!) linear slowdown of parallel builds on 40 core machine
-------------------------------------+-------------------------------------
        Reporter:  carter            |                Owner:
            Type:  bug               |               Status:  new
        Priority:  high              |            Milestone:  8.0.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, #8224       |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by bgamari:

Old description:

> im seeing slowdowns in parallel builds of a (simple!!) 6 module project
> when I build it on a 40 core server i'm using for work.  for any given
> ghc invocation with -jn, once n>10, i start to see a super linear slow
> down  as a function of n
>
> heres some basic numbers
>

> at -j1 0m2.693s
>
> at -j4  0m2.507s
>
> at -j10  0m2.763s
>
> at -j25 0m12.634s
>
> at -j30 :   0m39.154s
>
> at -j40 : 0m57.511s
>
> at -j60 : 2m21.821s
>

> these timings are another 2-4x worse if ghc is invoked indirectly via
> cabal-install / setup.hs
>
> according to the linux utility latencytop, 100% of ghc's cpu time was
> spent on user-space lock contention when I did the -j40 invocation.
>
> the timing in the -j40 case stayed the same even when ghc was also passed
> -O0 (and -fforce-recomp to ensure it did the same )
>

> a bit of experimentation makes me believe that in *ANY* cabalized project
> on a 40 core machine will exhibit this perf issue.
>
> cabal clean ; cabal configure --ghc-options="-j" ; cabal build -j1
>
> should be enough to trigger the lock contention.
>
> That said, I'll try to cook up a minimal repro that i can share the
> source for post haste.

New description:

 I'm seeing slowdowns in parallel builds of a (simple!!) 6 module project
 when I
 build it on a 40 core server that I'm using for work. For any given ghc
 invocation
 with `-jn`, once n>10, I start to see a super-linear slow down as a
 function of n,

 here are some basic numbers,

 ||=    =||= compile time =||
 || -j1  || 0m2.693s   ||
 || -j4  || 0m2.507s   ||
 || -j10 || 0m2.763s   ||
 || -j25 || 0m12.634s  ||
 || -j30 || 0m39.154s  ||
 || -j40 || 0m57.511s  ||
 || -j60 || 2m21.821s  ||

 These timings are another 2-4x worse if ghc is invoked indirectly via
 cabal-install / `Setup.hs`

 According to the linux utility latencytop, 100% of ghc's cpu time was
 spent on user-space lock contention when I did the `-j40` invocation.

 The timing in the `-j40` case stayed the same even when ghc was also
 passed `-O0` (and `-fforce-recomp` to ensure it did the same )


 A bit of experimentation makes me believe that *any* cabalized project on
 a 40 core machine will exhibit this performance issue.

 {{{
 cabal clean
 cabal configure --ghc-options="-j"
 cabal build -j1
 }}}

 should be enough to trigger the lock contention.

 That said, I'll try to cook up a minimal repro that i can share the source
 for post haste.

--

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


More information about the ghc-tickets mailing list