Understanding Scalable Shares

Configuring scalable shares for a parent resource pool means that all its child resource pools are not isolated from each other. This avoids the resource dilution problem within child resource pools, by expanding their resource entitlements when they have more virtual machines running.The effect is to negate resource pool isolation while retaining the proportions of resource pool priority levels. A high priority resource pool is entitled to give twice as much of the available resource to its virtual machines, in comparison with a normal priority sibling resource pool, but all virtual machines suffer proportionately when many virtual machines run in the normal priority pool.

To illustrate the use of the scalable shares option, consider how it might apply to a fictional situation in which a data center is configured, with non-scalable shares, to support three divisions of a business. Division 1 is supported by resource pool RP1, which is configured as high priority, in an attempt to compensate for the dilution of RP1's resources that resulted from adding new virtual machines to RP1. Some virtual machines in RP1 are individually configured to get higher priority than their siblings.

Note: For simplicity of illustration, these examples deal only with CPU shares. A real configuration would include both CPU and memory resources, which act independently in regard to calculating the absolute resources available to a running virtual machine.
Figure 1. Example Data Center Configured with Fixed Shares
Shows CPU fixed shares.

As a result of resource dilution within RP1 in a fixed shares configuration, some of RP1's virtual machines are entitled to exactly the same resource allocation as RP2's virtual machines, even though RP2 is configured as normal priority but RP1 is configured as high priority. Some users in Division 1 are disappointed because they expected their virtual machines to receive twice the allotment of RP2's virtual machines. The company's CIO agrees to reconfigure the data center to take advantage of the scalable shares option.

Figure 2. Example Scalable Shares Configuration
Shows CPU scalable shares.

With scalable shares enabled on a parent resource pool, resource entitlements change. Because RP1 has more virtual machines than RP2 or RP3, it is entitled to a larger fraction of the root resource pool's resources during a resource contention situation. This is represented mathematically by multiplying the resource pool's numeric shares by the total of the shares of its children.

Calculating resource pool allocation in a scalable shares configuration is conceptually a six-step recursive process, working from leaf to root of the resource pool tree:
  1. Convert the priority levels of its child virtual machines into numeric shares equivalents, in the same way as in a fixed shares configuration: Multiply VirtualMachine.config.hardware.numCPU by a constant that depends on the priority level. The constants are 2000, 1000, and 500 for high, normal, and low respectively.
  2. If the resource pool has child resource pools, convert their priority levels into numeric shares equivalents, recursively.
  3. Do the same conversion for the resource pool itself. For the purpose of this conversion, all resource pools are assigned an implicit size of 4 vCPUs.
  4. Sum the children's numeric shares and multiply the sum by the parent's numeric shares.
  5. Repeat steps 1-4 for all the parent's siblings.
  6. Allocate the available resources among all siblings, in proportion to the products from steps 4 and 5.

As a result of the scalable shares configuration, Division 1 users find their virtual machine performance improved, but Divisions 2 and 3 suffer by comparison. To rectify this, the IT department resets the priority levels of RP1, RP2, and RP3 to normal. This adjustment leaves virtual machine performance comparable across divisions: high priority virtual machines get twice the resource allocation of normal priority virtual machines, even across resource pool boundaries.

Figure 3. Scalable Shares Configuration with All Resource Pools Configured at normal Level
Shows all resource pools at normal level.

A best practice when configuring scalable shares is to configure resource pools to the normal priority level and apply high priority levels or low priority levels to specific virtual machines.