Difference between revisions of "Containers/Guarantees for resources"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
 
(No difference)

Revision as of 09:37, 15 September 2006

This page describes how guarantees for resources can be implemented.

How to guarantee a guarantee

It's not obvious at the first glance, but there are only two ways how a guarantee can be provided:

  1. reserving desired amount in advance
  2. limiting consumers to keep some amount free

The first way has the followong disadvantages:

reserving is impossible for certain resources
such resources as CPU time, disk or network bandwidth and similar can not be just reserved as theirs amount instatntly increases;
reserving is essentially a limit, but much more strict
cutting off X megabytes from RAM implies that all the rest groups are limited in theis RAM consumption;
reserving reduces containers density on the node
if one wants to run some identical containers each requiring 100Mb on 1Gb system reservations can be done for 10 only and starting the 11th becomes impossible.

On the other hand limiting of containers can provide guarantees for them as well.

Providing a guarantee through limiting

The idea of getting a guarantee is simple:

if any group requires a Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle G_i} units of resource from Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle R} units available then limiting all the rest groups with Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle R - G_i} units provides a desired guarantee

For Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle N} groups in the system this implies solving a linear equation set to get limits Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle L_i} like this:

Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle \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} }

In a matrix form this looks like

Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle A L = G }

where

Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle 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} }


and thus the solution is

Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle L = A^{-1}G }


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;

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