overload
Module
overload
Module summary
An Overload Regulation Process
Description
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
exceedsMaxIntensity
.
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.
Exports
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
Types:
OverloadInfo = [{total_intensity, TotalIntensity}, {accept_intensity, AcceptIntensity}, {max_intensity, MaxIntensity}, {weight, Weight}, {total_requests, TotalRequests}, {accepted_requests, AcceptedRequests}]. TotalIntensity = float() > 0 AcceptIntensity = float() > 0 MaxIntensity = float() > 0 Weight = float() > 0 TotalRequests = 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)
See Also
alarm_handler(3)
, sasl(6)
© 2010–2017 Ericsson AB
Licensed under the Apache License, Version 2.0.