Containers/Guarantees for resources

From OpenVZ Virtuozzo Containers Wiki
< Containers
Revision as of 12:36, 23 May 2011 by 188.163.68.72 (talk) (How to guarantee a guarantee)
Jump to: navigation, search


This page describes how guarantees for resources can be implemented.

comment4,

Providing a guarantee through limiting

The idea of getting a guarantee is simple:

if any group 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} 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 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

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^{-1} = \frac {1} {N - 1} \left( A - (N - 2) E \right) }

This solutions looks huge, but the 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} vector is calculated in 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 O(N)} 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.