Difference between revisions of "Containers/Guarantees for resources"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
(→‎How to guarantee a guarantee)
(→‎Providing a guarantee through limiting)
Line 6: Line 6:
 
comment4,
 
comment4,
  
−
= Providing a guarantee through limiting =
+
comment5,
−
The idea of getting a guarantee is simple:
 
−
 
 
−
{{out|if any group <math>g_i</math> requires a <math>G_i</math> units of resource from <math>R</math> units available then limiting all the rest groups with <math>R - G_i</math> units provides a desired guarantee}}
 
−
 
 
−
For <math>N</math> groups in the system this implies solving a linear equation set to get limits <math>L_i</math> like this:
 
−
 
 
−
<center><math>
 
−
\begin{cases}
 
−
L_2 + L_3 + \ldots + L_N = R - G_1 \\
 
−
L_1 + L_3 + \ldots + L_N = R - G_2 \\
 
−
\ldots \\
 
−
L_1 + L_2 + \ldots + L_{N-1} = R - G_N \\
 
−
\end{cases}
 
−
</math></center>
 
−
 
 
−
In a matrix form this looks like
 
−
 
 
−
<center><math>
 
−
A L = G\;
 
−
</math></center>
 
−
 
 
−
where
 
−
 
 
−
<center><math>
 
−
A = \begin{bmatrix}
 
−
0 & 1 & 1 & \cdots & 1 & 1 \\
 
−
1 & 0 & 1 & \cdots & 1 & 1 \\
 
−
& & \cdots \\
 
−
1 & 1 & 1 & \cdots & 1 & 0 \\
 
−
\end{bmatrix}
 
−
,
 
−
L = \begin{bmatrix} L_1 \\ L_2 \\ \vdots \\ L_N \end{bmatrix}
 
−
,
 
−
G = \begin{bmatrix} R - G_1 \\ R - G_2 \\ \vdots \\ R - G_N \end{bmatrix}
 
−
</math></center>
 
−
 
 
−
 
 
−
and thus the solution is
 
−
 
 
−
<center><math>
 
−
L = A^{-1}G\;
 
−
</math></center>
 
−
 
 
−
 
 
−
Skipping boring calculations, the reverse matrix <math>A^{-1}\;</math> is
 
−
 
 
−
<center><math>
 
−
A^{-1} = \frac {1} {N - 1} \left( A - (N - 2) E \right)
 
−
</math></center>
 
−
 
 
−
This solutions looks huge, but the <math>L</math> vector is calculated in <math>O(N)</math> time:
 
−
   
 
−
<pre>
 
−
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);
 
−
}
 
−
</pre>
 
−
 
 
−
== Disadvantages of this approach ==
 
−
 
 
−
This approach has only one disadvantage: O(n) time needed to start a new container.
 

Revision as of 12:41, 23 May 2011


This page describes how guarantees for resources can be implemented.

comment4,

comment5,