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.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.
Example Data Center Configured
with 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.Example Scalable Shares
Configuration

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:
- Convert the priority levels of its child virtual machines into numeric shares equivalents, in the same way as in a fixed shares configuration: MultiplyVirtualMachine.config.hardware.numCPUby a constant that depends on the priority level. The constants are2000,1000, and500forhigh,normal, andlowrespectively.
- If the resource pool has child resource pools, convert their priority levels into numeric shares equivalents, recursively.
- 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.
- Sum the children's numeric shares and multiply the sum by the parent's numeric shares.
- Repeat steps 1-4 for all the parent's siblings.
- 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.Scalable Shares Configuration with
All Resource Pools Configured 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.