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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.