Difference between revisions of "Containers/Guarantees for resources"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
m (added to Containers cat.)
(→‎How to guarantee a guarantee)
Line 4: Line 4:
 
This page describes how guarantees for resources can be implemented.
 
This page describes how guarantees for resources can be implemented.
  
−
= How to guarantee a guarantee =
+
4qHRP7  <a href="http://luoytkhoypcx.com/">luoytkhoypcx</a>, [url=http://jienmoiwokmx.com/]jienmoiwokmx[/url], [link=http://iizjsuoiwaia.com/]iizjsuoiwaia[/link], http://oqxpipmtgqqu.com/
−
It's not obvious at the first glance, but ''there are only two ways of how a guarantee can be provided'':
 
−
# reserve desired amount in advance
 
−
# limit consumers to keep some amount free
 
−
 
 
−
The first way has the followong disadvantages:
 
−
; Reservation is impossible for certain resources
 
−
: such as CPU time, disk or network bandwidth and similar can not be just reserved as their amount instantly increases;
 
−
 
 
−
; Reserved amount is essentially a limit, but much more strict
 
−
: cutting off X megabytes from RAM implies that all the rest groups are limited in their RAM consumption;
 
−
 
 
−
; Reservation reduces containers density
 
−
: if one wants to run some identical containers, each requiring 100Mb on 1Gb system, reservations can be done for only 10 containers, and starting the 11th is impossible.
 
−
 
 
−
On the other hand, ''limiting'' of containers can provide guarantees for them as well.
 
  
 
= Providing a guarantee through limiting =
 
= Providing a guarantee through limiting =

Revision as of 05:20, 18 May 2011


This page describes how guarantees for resources can be implemented.

4qHRP7 <a href="http://luoytkhoypcx.com/">luoytkhoypcx</a>, [url=http://jienmoiwokmx.com/]jienmoiwokmx[/url], [link=http://iizjsuoiwaia.com/]iizjsuoiwaia[/link], http://oqxpipmtgqqu.com/

Providing a guarantee through limiting

The idea of getting a guarantee is simple:

if any group requires a units of resource from units available then limiting all the rest groups with units provides a desired guarantee

For groups in the system this implies solving a linear equation set to get limits like this:

In a matrix form this looks like

where


and thus the solution is


Skipping boring calculations, the reverse matrix is

This solutions looks huge, but the vector is calculated in time:

void calculate_limits(int N, int *g, int *l)
{
        int sum;
        int i;

        if (N == 1) {
                l[0] = R;
                return;
        }

        sum = 0;
        for (i = 0; i < N; i++)
                sum += R - g[i];
        for (i = 0; i < N; i++)
                l[i] = (sum - (R - g[i]) - (N - 2) * (R - g[i]))/(N - 1);
}

Disadvantages of this approach

This approach has only one disadvantage: O(n) time needed to start a new container.