overload
(sasl)An Overload Regulation Process
Warning!
All functions in this module are deprecated and will be removed in a future release.
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, denotedTI(n), is calculated according to the formulaTI(n) = exp(-Weight*(T(n) - T(n-1)) * TI(n-1) + Weight,where
TI(n-1)is the previoustotal intensity. -
The current
accept intensity, denotedAI(n), is determined by the formulaAI(n) = exp(-Weight*(T(n) - T(n-1)) * AI(n-1) + Weight,where
AI(n-1)is the previousaccept intensity, if the value ofexp(-Weight*(T(n) - T(n-1)) * AI(n-1)is less thanMaxIntensity. Otherwise the value isAI(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.
Functions
request() -> accept | reject
Returns accept or reject depending on the
current value of the accept intensity.
The application
calling this function is to proceed with the job in
question if the return value is accept; otherwise it
is not to continue with that job.
get_overload_info() -> OverloadInfo
OverloadInfo = [{total_intensity, TotalIntensity}, {accept_intensity, AcceptIntensity}, {max_intensity, MaxIntensity}, {weight, Weight}, {total_requests, TotalRequests}, {accepted_requests, AcceptedRequests}].TotalIntensity = float() > 0AcceptIntensity = float() > 0MaxIntensity = float() > 0Weight = float() > 0TotalRequests = integer()AcceptedRequests = integer()
Returns:
- Current total and accept intensities
- Configuration parameters
- Absolute counts of the total number of requests
- Accepted number of requests (since the overload process was started)