Using ElectricCommander to Parallelize Build and Test Processes

When we talk about parallel builds at Electric Cloud, we’re most likely to be talking about ElectricAccelerator, which does an awesome job of speeding up builds automatically, giving 10-20x speedups on a regular basis. We sometimes forget to mention that ElectricCommander can also be used to parallelize build processes, with a very small amount of work.

Commander allows adjacent procedure steps to run in parallel. Because those steps can call subprocedures, whole procedures can be run in parallel.

This allows us to:

  • Build on multiple platforms in parallel.
  • Run multiple test suites in parallel. For example, run server tests in parallel with UI tests.
  • Speed up static analysis like Coverity and Klocwork by spreading the work across multiple machines.
  • Run independent parts of the build in parallel. For example, build the installer in parallel with running the unit tests.

We make extensive use of this feature in our own builds at Electric Cloud, to good effect. A full build of ElectricCommander 3.1 (9 platforms) is composed of 135 different commands (compiles, unit tests, making installers, doing installs, running system tests, etc.).  Cumulatively, this adds up to 697 minutes of work. By running the build for each platform in a parallel step, we get this down to 203 minutes. By further parallelizing the work within each platform build (in particular, the tests), we get that down to 149 minutes, getting close to 5x improvement over the serial time.

Our customers report great success in speeding up their builds, in particular static analysis, with ElectricCommander.  One customer took their static analysis phase from 2 hours 47 minutes down to 30 minutes. They brought their test time from 13.5 hours down to 47 minutes! Another customer improved their static analysis builds from 8 hours to 2 hours.

Running Steps in Parallel

Running commands in parallel is easy with ElectricCommander. When editing a procedure step, check the “Run in Parallel” box for two or more adjacent steps in a procedure and those steps will be executed in parallel. When all the parallel steps in that sequence have completed, the next serial step will start.

At first, this may not seem that powerful, until you consider that the steps don’t have to be simple command invocations, they can be subprocedure calls. Below is a screen shot of the procedure we use to build Commander. There is one serial step, followed by ten parallel steps, one for each platform, plus one for the system tests, as you can see in the Parallel column. Last, there is one serial step to generate reports for the whole build. All but the last of these steps invoke other procedures, as shown in the Action column.

Parallel steps in an ElectricCommander procedure

Parallel steps in an ElectricCommander procedure

At runtime, each of these procedure calls are expanded and invoked in parallel, which looks something like this:

Parallel job steps in ElectricCommander

Parallel job steps in ElectricCommander

After configuring your steps to run in parallel, you can use Commander’s Resource Pool feature to automatically distribute the workload over several machines.

It’s also possible to use Commander’s property system to allow steps to interact in interesting ways, for example, to have one part of the build wait until another part of the build completes.  I’ll show you how to do this in a future post.

Anders Wallgren

Anders Wallgren is Chief Technical Officer of Electric Cloud. Anders brings with him over 25 years of in-depth experience designing and building commercial software. Previously, Anders held executive and management positions at Aceva, Archistra, Impresse, Macromedia (MACR), Common Ground Software and Verity (VRTY). Anders holds a B.SC from MIT.

Share this:

Leave a Reply

Your email address will not be published. Required fields are marked *

Subscribe

Subscribe via RSS
Click here to subscribe to the Electric Cloud Blog via RSS

Subscribe to Blog via Email
Enter your email address to subscribe to this blog and receive notifications of new posts by email.