Many applications have requirements for flexibility in the amount of resources that can be used. The spare capacity module allows the system to share the spare capacity that may be left over from the negotiation of the service contracts, in a static way. During the negotiation, the minimum requested resources are granted to each server, if possible. Then, if there is any extra capacity left, it is distributed among those applications that have expressed their ability to take advantage of it.
Table 3 shows the service contract attributes related to the spare capacity. There are two ways of making use of spare capacity, described with the granularity attribute. In the continuous granularity, the application is able to make useful work for any value of budget between the minimum and the maximum budget, and for any period between the maximum and the minimum period. The case of continuous budget, for instance, corresponds to anytime algorithms, while the continuous period corresponds to an iterative algorithm, for instance a video display process, in which the quality increases with the frequency of execution.
The discrete granularity is designed for n-version algorithms that can run different versions with different quality levels, each with a different value of budget per period. The possible values are described in the contract through the utilization set attribute.
The method to distribute the spare capacity is based on two numeric values called the importance and quality. The importance is a small integer like a fixed priority intended for non-cooperative servers: a higher importance server will get all the available spare capacity before any lower importance server. If there are servers of the same importance level, they share the extra capacity proportionally to their quality value, which is intended for cooperative servers: the share that they get is proportional to their value divided by the total quality for their importance level.
The distribution of spare capacity is made every time there is a negotiation, a renegotiation, or just a change of quality and importance. The values assigned to each server are reported to them, so that they can use the information to know how to run. The assigned capacity is guaranteed until the next negotiation or change.