Data Mining ElectricAccelerator Annotation: Bill of Materials

ElectricAccelerator annotation files contain a gold mine of information about your build, such as the dependencies between jobs in the build, the time required to run each job, the exact command-line and environment used to invoke each command in the build, and even every file read and written by each job in the build. Many people have correctly speculated that they could use the file access data in annotation to create a bill of materials for the build, similar to so-called “configuration records” in ClearCase. In this post, we’ll look at how we can do that using the annolib library.
Read the rest of this entry »

Makefile performance: $(shell)

One rookie performance mistake I’ve seen in GNU make makefiles is the use of $(shell) without := assignment. Of course I’m not the first person to write about this, but people are still making this mistake, and it’s so easy to fix, it’s really tragic that it’s still out there.

Update 2010-11-15: check out my latest post on shell commands in GNU make!

Read the rest of this entry »

Makefile performance: recursive make

Are you using the best method for invoking submakes in a recursive make based build? A simple change can turn on the afterburners by unlocking parallelism.
Read the rest of this entry »

Measuring ElectricAccelerator Cache Efficiency

Somebody asked me the other day, “How much does the ElectricAccelerator filesystem cache reduce I/O load on my build host?” This is an interesting question, because in some cases, the impact of Accelerator caching is a big part of the performance benefit. Consider the case of ClearCase dynamic views, which have notoriously bad performance, particularly for stat() operations. By reducing the number of times the build accesses the host filesystem, Accelerator can provide a substantial performance boost. In one extreme case, I saw a build that ran 50 times faster just by using a single Accelerator agent, because the the host filesystem was so slow. In this post, I’ll show how you how to determine how much Accelerator caching is doing for your build.
Read the rest of this entry »

ElectricAccelerator vs. distcc, round 3: samba

In this continuation of the ElectricAccelerator vs. distcc battle royale, I’ll compare the performance of these two tools when building samba, a suite of tools that provide file and print services to Windows clients from Unix-like servers. Samba is a particularly interesting package for this comparison because distcc was originally created in order to accelerate samba builds, and until recently, the distcc project was hosted by the samba organization. In some sense, samba is the poster child for distcc acceleration, so it should work quite well with distcc.
Read the rest of this entry »