> This seems to me like a reasonable port to have. My only concern is it
> takes 40 minutes to build with MAKE_JOBS=4 on a 4 core machine:
> cpu0: Intel(R) Core(TM) i7-10610U CPU @ 1.80GHz, 7097.97 MHz, 06-8e-0c

I don't have an easy solution to that, but here are some data and a
couple of thoughts:


# Data

On my slower machine, without MAKE_JOBS*, here's how the time to build
devel/git-annex is divided among different Cabal packages:

- Total: 1h45m
- 14m (13%) building git-annex itself
- 4.7m (4.5%) building aeson
- 3.9m (3.7%) building cryptonite
- 3.5m (3.3%) building persistent-sqlite
- 2-3min each (~12.2%) building aws, vector, lens, persistent,
  language-javascript
- The rest (~63%): A couple hundred faster packages.

I measured this by building with
MODCABAL_BUILD_ARGS=--verbose=normal+timestamp, artificially adding one
more timestamp at the end, then running the output through
egrep '^[0-9.]+ ' build.log | tail -r | awk '{ print n-$1, $0; n = $1 }' |
sort -nr. Full output attached.

*I used the default MAKE_JOBS=1 because Cabal wasn't giving "completed"
 timestamps and I can't see how else to measure the time. The fraction
 of time used for git-annex itself presumably increases somewhat when
 the build is parallel.


# Thoughts

I agree with Greg's comment in the other thread that the ideal
solutions would be speeding up ghc or something like ccache. But I
still wonder if there's a quick-and-dirty way to get a modest speedup
without too much maintenance cost.

Earlier I suggested creating ports for a handful of slow packages, to
speed up builds. The numbers above show that's won't help much, unless
"handful" means hundreds and then we're back where we started.

What about adding a single port with a "collection" of commonly used
Hackage libraries? print/texlive does this with latex packages. If we
added a port with the few hundred most-used hackage packages, and other
Haskell packages could start with that, I'm guessing that would cut
down the total build time a lot, at the cost of having one big slow
port.

If there's any interest I could probably find some time to try
implementing it. I don't know how hard it would be.


-- 
James

Reply via email to