Understanding Fixed Reservations

A fixed reservation for a resource pool provides a way to guarantee that all virtual machines running simultaneously within the pool have access to a minimum quantity of the resource. The pool's reservation should be large enough to allocate among the virtual machines such that each one has its configured minimum required to start up.

To configure fixed reservations, set the epandableReservation property to false in ResourceConfigSpec.ResourceAllocationInfo. Set the pool's reservation amount to an aggregate value that is sufficient to support the maximum number of virtual machines that need to run concurrently within the resource pool. If the pool has nested resource pools that are also configured for fixed reservations, you should determine their reservation amounts in the same way, recursively.

When you configure a resource pool hierarchy for fixed reservations, consider these guidelines:

  • A resource pool that contains only virtual machines should be configured with a reservation amount at least as great as the sum of the reservations of its children, or as many of them as need to run concurrently. Otherwise, one or more virtual machines will fail to get its minimum resource allocation and the host will not start it.
  • A resource pool that contains only nested resource pools configured for fixed reservations must be configured with a reservation amount at least as great as the sum of the reservations of its children. This ensures that its child resource pools can fulfill their obligations to their own children, according to their configured reservation amounts. If you cannot configure the parent pool with an adequate amount of the resource, consider configuring the nested resource pools for expandable reservations instead.
  • A resource pool that contains both virtual machines and nested resource pools is not a best practice, because it can complicate configuration management. If you configure a resource pool in this way, you should first make sure the virtual machines can receive their own reservation amount, and then configure reservations for the nested pools from the remainder of the parent's reservation after subtracting the virtual machine reservations.

Before you create new child resource pools, check available resources in the parent pool. The ResourcePool.runtimeInfo property is a ResourcePoolRuntimeInfo data object. The ResourcePoolRuntimeInfo.cpu and ResourcePoolRuntimeInfo.memory properties are ResourcePoolResourceUsage objects with resource usage information, including an unreservedForPool property. If the parent pool does not have enough available resources, reconfigure the reservation values of child pools before adding the new pool.