← Back to team overview

launchpad-dev team mailing list archive

Faster builds

 

Hi folks,

Benji and I got a little worked up yesterday over the time it takes to do a "make" or "make schema." We're probably not alone.

I have two pieces of good news for you, then some pie in the sky, and a question (with more floating pie attached).


Good news #1: an optimized version of security.py just hit devel, so "make schema" will be much faster.


Good news #2: the default "make" target now supports parallel builds!

So instead of "make" or "make build" try "make -j2" or "make build -j2" respectively. On my system that speeds it up from 2:40 to 1:30, give or take. (Parallel builds may still break on some other targets though.)


Pie in the sky #1: Benji figured a way around a sizable chunk of the time it takes to generate the WADL. WADL generation is the big bottleneck, especially in a parallel build.


Then, my Question: Would anyone mind if we stopped doing a full build for every schema build?

It would mean that you can't do only a "make schema" in your branch and expect LP or its tests to run; you'll have to do a "make" to set up the necessary files in your branch, and optionally a "make schema" to set up the database according to the branch you're in.


And Pie in the sky #2: With that change in the makefile, I can do a "make schema" in under 50 seconds. Even in a branch that hasn't been built yet.


Happy Hacking!  Details below for whoever wants them.


Jeroen


Appendix A: Technical Details

* We made security.py faster, but not yet incremental like we want to. The only change was that a lot of GRANT statements were bundled together into fewer, bigger statements. We could extend that same trick to get further speedups, but ZCML processing is now the bottleneck.

* On my machine, "make -j2" manages to keep 2 cores productive for almost the entire build. But "make -j3" merely slows down the longest job while pointlessly finishing the shorter ones faster.

* WADL generation now dominates build time, so for further gains we need that to run either faster or in parallel. Breaking it down into multiple script runs would incur more ZCML processing, which could be significant.

* The cost sink in WADL generation is almost half a million calls to add_option in optparse. Accounted for about 1 minute in a 4-minute profiling run. The module was never meant for such heavy use, but Benji thinks we could probably get by without those calls.

* Avoiding the full build during "make schema" can be done by replacing this Makefile line:

schema: build clean_codehosting

with this one:

schema: buildout_bin clean_codehosting

EOF



Follow ups