diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2016-09-02 10:26:43 +0100 |
---|---|---|
committer | Sergei Trofimovich <slyfox@gentoo.org> | 2016-09-02 10:29:51 +0100 |
commit | b3b64a95b9653963a2868278fd0130858a9eb9f0 (patch) | |
tree | 7228fae8f1f598deff28975b5f5a041ef879bc13 /eclass/haskell-cabal.eclass | |
parent | media-video/vlc: add patches to build with ffmpeg3, bug #574788 (diff) | |
download | gentoo-b3b64a95b9653963a2868278fd0130858a9eb9f0.tar.gz gentoo-b3b64a95b9653963a2868278fd0130858a9eb9f0.tar.bz2 gentoo-b3b64a95b9653963a2868278fd0130858a9eb9f0.zip |
haskell-cabal.eclass: unleash full parallelism of parallel ghc
I've explored scalability of 'ghc --make -j' a bit in
https://ghc.haskell.org/trac/ghc/ticket/9221
Some takeaways:
- never specify -j<N> with N > CPU. garbage collector threads
waste kernel time running sched_yield()
- GHC allocates A Lot: large nursery decreases GC interruptions.
We fix it with '-A256M'
- for large nursery enabling work-stealing makes GC finish faster
on each collection cycle.
We fix it with -qb0
While at it move HCFLAGS setup after parallel defaults.
That allows user to override defaults with own HCFLAGS.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to 'eclass/haskell-cabal.eclass')
-rw-r--r-- | eclass/haskell-cabal.eclass | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/eclass/haskell-cabal.eclass b/eclass/haskell-cabal.eclass index c1a13300abb0..94ef7f35ad75 100644 --- a/eclass/haskell-cabal.eclass +++ b/eclass/haskell-cabal.eclass @@ -372,24 +372,20 @@ cabal-configure() { cabalconf+=($(cabal-constraint "ghc")) fi + # parallel on all available cores + if ghc-supports-parallel-make; then + # It should have been just -j$(makeopts_jobs) + # but GHC does not yet have nice defaults: + # https://ghc.haskell.org/trac/ghc/ticket/9221#comment:57 + cabalconf+=(--ghc-options="-j$(makeopts_jobs) +RTS -A256M -qb0 -RTS") + fi + local option for option in ${HCFLAGS} do cabalconf+=(--ghc-option="$option") done - # parallel on all available cores - if ghc-supports-parallel-make; then - local max_jobs=$(makeopts_jobs) - - # limit to very small value, as parallelism - # helps slightly, but makes things severely worse - # when amount of threads is Very Large. - [[ ${max_jobs} -gt 4 ]] && max_jobs=4 - - cabalconf+=(--ghc-option=-j"$max_jobs") - fi - # Building GHCi libs on ppc64 causes "TOC overflow". if use ppc64; then cabalconf+=(--disable-library-for-ghci) |