-
-
Notifications
You must be signed in to change notification settings - Fork 14.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
haskellPackages: build with RTS -A64M options #317251
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Otherwise this makes sense to me. -A64M
is beneficial in multi-threaded situations. As far as I'm aware, Cabal
is single-threaded for our usecase while ghc (even with our current escaping mess) receives a -j
flag.
My testing with |
c91ca68
to
0b1a452
Compare
Those flags were not actually passed to GHC before, but to Setup.hs. They were introduced in NixOS#86948. The related twitch live stream uses the build of git-annex as a measurement. I get the following numbers when building git-annex with doCheck = false: - for current master: 1:40 wall clock / 340s user - without any -A64M argument: 1:40 wall clock / 340s user - with this fix: 1:13 wall clock / 280s user The idea was good, but the settings were never active. More testing revealed that this seems to work on darwin just as well, so we're removing the isLinux condition, too.
Successfully created backport PR for |
While working on #317181 I realized that the
+RTS -A64M -RTS
options inparallelBuildingFlags
were never passed to GHC, because the arguments are not passed quoted. This means those arguments are actually passed toSetup.hs
. This can be verified by removing-rtsopts
fromsetupCompileFlags
- after this change the configure command will throw an error, because it doesn't understand the+RTS ...
argument anymore. Once you pass it properly, the error is gone again and GHC receives the arguments.Passing the RTS flags to
Setup.hs
(i.e. cabal) - makes little to zero sense. The same is true for the entireparallelBuildingFlags
being passed tosetupCompileFlags
: If there was any customSetup.hs
script in any package anywhere that benefits from heavy parallelization like this... there would be something wrong with that script! ;)Those flags were introduced in #86948. The related twitch live stream uses the build of git-annex as a measurement. I get the following numbers when building
git-annex
withdoCheck = false;
:This 27% improvement is essentially the result from that live stream mentioned above. Let's use that, shall we?
Things done
haskell.lib.overrideCabal haskellPackages.git-annex { doCheck = false; }
[...]
Add a 👍 reaction to pull requests you find important.