Performance Tuning
Some operations in Argyll can be particularly slow, so it is worth
examining ways of improving performance, or trading memory
consumption for performance.
(See here for how to set Environment
variables.)
Creating Device Links and Profiles
In creating device links or the B2A tables of profiles, the
execution time is often dominated by the inversion of forward color
lookup values. An in-memory cache is employed to speed up this
operation, by keeping computed values in case they can be used more
than once. The amount of memory used for caching these values is
pre-set within the inversion code, and by default is set to use half
of the available RAM on the system, with a minimum of 50 Mbytes.
The reverse cache size can be changed by setting an environment
variable ARGYLL_REV_CACHE_MULT
to a number greater or less than than 1.0 This will multiply the
size of the cache by that number (i.e. 1.5 would increase the cache
size by 50%, 0.5 would halve it).
If you find that colprof
or collink are
working very slowly, but that your CPU's are nearly idle, then this
is a sign of disk swapping, and that too much memory is being
requested. This can be because other applications are also
using memory, or Argyll's default setting tries to use more memory
than is actually available. You can try shutting down other
applications when this happens, or you can lower the amount of memory
Argyll uses by setting ARGYLL_REV_CACHE_MULT
to a value less than 1.0 (ie. try 0.5).
If you have a lot of memory available, you can try increasing the
cache size to use more of the available RAM (particularly if you get
a "Warning - Reverse Cell Cache exhausted, processing in chunks"
message during processing), but if you set it to a value too near
2.0 you risk disk swapping, which can slow progress to a crawl.
If you have a lot of memory available, then a second adjustment that
can make a great difference to the time taken in creating B2A tables
is the resolution of the inverse lookup acceleration grid. The finer
the grid, the less searching is needed to locate the input
colorspace values that correspond to a target output color value,
but the greater the memory used in this structure, and the greater
the setup time needed to initialize the acceleration grid. The ARGYLL_REV_ACC_GRID_RES_MULT
environment variable can alter the default resolution by a scale
factor. A value of 0.5 for instance, would halve the resolution
(typically meaning 1/8 th. the total number of grid entries and
memory), while a value of 2.0 would double it, typically resulting
in 8 times the memory usage. Increasing the resolution too much will
reduce the available memory for the reverse cache, and greatly
increase setup time.