[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Will 2021 be the year of build systems on gexps?
From: |
Ludovic Courtès |
Subject: |
Will 2021 be the year of build systems on gexps? |
Date: |
Fri, 19 Feb 2021 17:01:38 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
Hello Guix!
Over the last few days I’ve been head-down working on
‘wip-build-systems-gexp’, the mythical branch that brings gexps to build
systems and packages, so we can say goodbye to
‘build-expression->derivation’. And… it’s quite a ride!
I rebased it on ‘core-updates’, which was a bit tedious (it hadn’t been
touched in 3 years or so). There are still test failures and build
systems not yet converted, but that’s the easy part, although both are
time-consuming.
The more difficult part is performance. On current ‘core-updates’ I get:
--8<---------------cut here---------------start------------->8---
$ GUIX_PROFILING=gc time ./pre-inst-env guix build qemu -d --no-grafts
/gnu/store/z27l6plrxr5wm7818xhj9mdll99jcqz3-qemu-5.1.0.drv
Garbage collection statistics:
heap size: 80.52 MiB
allocated: 191.14 MiB
GC times: 15
time spent in GC: 0.66 seconds (32% of user time)
2.05user 0.12system 0:01.93elapsed 112%CPU (0avgtext+0avgdata
242872maxresident)k
0inputs+0outputs (0major+34228minor)pagefaults 0swaps
--8<---------------cut here---------------end--------------->8---
but on ‘wip-build-systems-gexp’ I get:
--8<---------------cut here---------------start------------->8---
$ GUIX_PROFILING=gc time ./pre-inst-env guix build qemu -d --no-grafts
/gnu/store/5n44l8cmrmkr747nsqbxpm4764jdsl3l-qemu-5.1.0.drv
Garbage collection statistics:
heap size: 80.52 MiB
allocated: 249.89 MiB
GC times: 16
time spent in GC: 0.75 seconds (34% of user time)
2.22user 0.13system 0:02.06elapsed 114%CPU (0avgtext+0avgdata
243532maxresident)k
0inputs+0outputs (0major+34304minor)pagefaults 0swaps
--8<---------------cut here---------------end--------------->8---
In short, 30% more garbage allocated and an 8% slowdown.
I’ve made progress identifying and mitigating what seems to be the main
cause of this (the fact that it’s possible to ungexp a list and that
list will be scanned in its entirety in search of file-like
objects—convenient but expensive) but as you can see, there’s still a
lot to do.
Statprof and gcprof are not super helpful here; I feel a need for better
tools here, or better metrics.
Anyway, that’s the situation. If you have ideas or if you’re in a
profiling & optimization mood, now’s the time to unleash your
creativity. :-)
Ludo’.
- Will 2021 be the year of build systems on gexps?,
Ludovic Courtès <=