overload is a process that indirectly regulates the CPU
usage in the system. The idea is that a main application calls
function
request/0
before starting a major job and
proceeds with the job if the return value is positive; otherwise
the job must not be started.
overload is part of the SASL application and all
configuration parameters are defined there.
A set of two intensities are maintained, the total intensity
and the accept intensity. For that purpose,
there are two configuration parameters, MaxIntensity
and Weight; both are measured in 1/second.
Then total and accept intensities are calculated as
follows. Assume that the time of the current call to
request/0 is T(n) and that the time of the
previous call was T(n-1).
-
The current total intensity, denoted
TI(n), is calculated according to the formula
TI(n) = exp(-Weight*(T(n) - T(n-1)) * TI(n-1) + Weight,
where TI(n-1) is the previous total intensity.
-
The current accept intensity, denoted
AI(n), is determined by the formula
AI(n) = exp(-Weight*(T(n) - T(n-1)) * AI(n-1) + Weight,
where AI(n-1) is the previous accept intensity,
if the value of exp(-Weight*(T(n) - T(n-1)) * AI(n-1)
is less than MaxIntensity. Otherwise the value is
AI(n) = exp(-Weight*(T(n) - T(n-1)) * AI(n-1)
The value of configuration parameter Weight controls the
speed with which the calculations of intensities react to
changes in the underlying input intensity. The inverted value of
Weight, T = 1/Weight, can be thought of as the
"time constant" of the intensity calculation formulas. For example,
if Weight = 0.1, a change in the underlying input intensity is
reflected in total intensity and accept intensity within
about 10 seconds.
The overload process defines one alarm, which it sets using
alarm_handler:set_alarm(Alarm). Alarm is defined
as follows:
{overload, []}
-
This alarm is set when the current accept intensity exceeds
MaxIntensity.
A new request is not accepted until the current accept
intensity has fallen below MaxIntensity. To prevent the
overload process from generating many set/reset alarms, the
alarm is not reset until the current accept intensity has fallen
below 75% of MaxIntensity; it is not until then that
the alarm can be set again.