19962013 Ericsson AB. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. overload Peter Högfeldt Peter Högfeldt (Joe Armstrong) 1996-10-29 A overload.sgml
overload An Overload Regulation Process

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.

request() -> accept | reject Requests to proceed with current job.

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 Returns current overload information data. 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)