Improving Performance - Tips

The following article explains how to further improve IncrediBuild's performance in your environment through fine-tuning your environment settings. Note that each environment and project will respond differently to a configuration change, so the best way to go is to try out the different suggestions and see the effect each has on performance.

For additional performance-related tips specific to using IncrediBuild with MS Visual Studio, see this section.

Tips in this Section:

Avoiding Task Execution on the Local Machine

Occasionally the Agent initiating the build might suffer from a high I/O load as a result of having to manage both file synchronization to and from remote Agents and writing the build's output to disk. This is especially relevant in the following scenarios:
    1. Initiating machine is utilizing more that one CPU for builds.
    2. A large number of remote Agents are set to participate in the build.
When this is the case, it may be beneficial to prevent the Agent that initiated the build from executing tasks that can also be run by remote Agents - compilation of source files, for example - in order to allow it to dedicate its resources entirely to build management and file synchronization.

The "Avoid task execution on local machine whenever possible" option can be enabled through the Agent Settings dialog Build System->General page.

Utilizing Multiple CPUs/cores

IncrediBuild can utilize multiple CPUs and cores when executing a distributed process. This requires that the "Multiple CPU(s)/Core(s)" extension package units is allocated to Agents running on machines with multiple CPUs/cores (in trial licenses all Agents automatically utilize all available CPUS and cores). Once this is done, distributable tasks will be run using each of the available CPUs/cores, depending on each Agent's current availability.

Moving your build's output folder to a fast-performing file system location.

In builds involving a large amount of output data, writing the build's output files to disk can become a bottleneck and slow down the distribution process. This is especially relevant in the following scenarios:
    1. Initiating machine is utilizing more that one CPU for builds.
    2. A large number of remote Agents are set to participate in the build.
In these cases, it can be very beneficial to set the project's output folders to a location that will perform as fast as possible. An ideal location for the project's output file would be a local, high-performance drive that's not running the Windows system.

Minimizing Directory Access

In certain environments, a performance gain may be obtained by minimizing the number of accesses to directories performed during builds. This is especially common in the following scenarios:

1. Builds that store input files in network-based file systems.
2. Projects using an input file directory tree spreading over an unusually large number of directories.

IncrediBuild features two alternate methods for minimizing directory access. Only one of these options can be used at any time:

1. Monitor file system changes to minimize directory access (Windows 32-bit platform only) - try enabling this option first to see if performance is improved. This option can be enabled through the Agent Settings dialog Build System->Advanced page.
2. Minimal directory synchronization - (Visual Studio builds only) - When this feature is enabled, IncrediBuild will only perform source-file timestamp checking once, except when it is possible that a non-compilation build step has modified the source file or directory after starting the build (as is the case, for example, in custom build steps that "generate" source files). The minimal directory synchronization mode can be activated using the Agent Settings dialog 'Build System->Advanced' page.

Running the Network Connectivity test

The Network Connectivity Test can locate machines with weak network performance slowing down builds. These machines can then be either upgraded or disabled from participating in remote builds.

Changing the Max. Number of Concurrent Agents Allowed in a Build

This Coordinator Setting controls the highest number of Agents that may participate at any one point in time in a build. Increasing this setting will allow more files to be built in parallel, but will also increase network, memory and CPU load on the initiating machine. A process of trial and error is usually required to achieve the best results with this setting.

This setting can be controlled from the Coordinator Settings dialog.

Increasing strong Agents' Assignment Priority

IncrediBuild will automatically prefer Agents with stronger hardware over others when assigning Agents as remote resources in distributed jobs. However, in some cases it is helpful to fine-tune the Coordinator's assignment logic, instructing it to prefer certain Agents over others. For example, we might want to increase the assignment priority of Agents which are "dedicated" to function as computing resources in builds and do not run any other jobs. Another example is to increase the assignment priority of Agents running on hardware that IncrediBuild underrates for some reason.

For more information about changing an Agent's assignment priority, see this section.

Disabling Agents on Machines with Weaker Hardware

Machines with slower CPUs and slower Ethernet cards may, in some cases, have a negative impact on overall build speed. If such a machine is being used by a developer who still wishes to run distributed builds, disable that user's Agent to prevent it from participating in other Agents' builds; if such a machine is used only as a remote resource, try unsubscribing it and see the effect on build time.

Configuring file and network scanning applications

Some "real-time scanning" applications such as anti-virus and firewall software can have a negative effect on build performance. If these applications can be configured not to scan files with extensions that are regularly used in builds (.obj, .pdb, .idb, .cpp, .c, .h, .sbr, .lib) or not to scan project intermediate folders, doing so may improve performance.

Increasing Build Priority

Build priorities are useful when better performance is required for builds initiated by specific Agents. These Agents can then be given a higher priority to ensure that builds they start will assigned more Agents in comparison to others. Build priorities are set from the Coordinator application.

Configuring IncrediBuild for operation alongside CPU-consuming Background Processes

Some applications are designed to run in the background and consume only as much CPU as is left unused by a PC. One common example is the SETI@home project. Since IncrediBuild Agents also run in a low process priority, these applications may take away CPU from builds, slowing them down. If any CPU-consuming background application is running on a machine that's also used as an IncrediBuild Agent, use the Agent Settings dialog Build Helper->CPU Availability page to configure IncrediBuild to run alongside this application.

Increasing the file cache size

IncrediBuild caches files from remote Agents in a special file cache stored under the installation folder. If there is not enough space to store all of the files, additional synchronization will be performed over the network resulting in extra network load and decreased performance. To see if the file cache is full and needs resizing, see the "File Cache" column in the Coordinator Application.

Enabling Fast Interprocess Communications Mode

When enabled, this feature will speed up communication between IncrediBuild components running on the same machine.

The fast interprocess communications mode can be activated using the Agent Settings dialog 'Network->General' page (this feature is enabled by default).

Copyright (C) 2001-2008 Xoreax Software Ltd. All rights reserved.
Converted from CHM to HTML with chm2web Standard 2.7 (unicode)