A sub-allocation is a resource allocation hierarchy that consists of one or more grouped resource allocations.

You can use a sub-allocation to divide a CPU resource allocation into one or more resource allocations, each with its own CPU allocation. These sub-allocations are grouped hierarchically under the top-level resource allocation. The percentage of the CPU that is allocated to the parent resource allocation is then distributed among the sub-allocations, following the proportions that are specified in the CPU allocation of each sub-allocation.

Note

Windows System Resource Manager evaluates the entire hierarchy of sub-allocations while applying management policies. The sub-allocation that is last in the hierarchy is applied first, and the remaining allocations are applied in order moving back up the hierarchy to the parent resource allocation.

The only relationship between a resource allocation and its sub-allocation is that they share the CPU bandwidth allocated by the parent resource allocation. The processes matched to these allocations are different.

Creating sub-allocations

Sub-allocations are created in existing resource allocations, which are part of resource allocation policies.

Note

You can only create a sub-allocation when the management rule of the parent resource allocation is set to Standard.

Note

Each sub-allocation must be configured to use a different process matching criterion. If the same process matching criterion is used multiple times in a sub-allocation hierarchy, processes will be managed by the first resource allocation they match.

Membership in the local Administrators group, or equivalent, is the minimum required to complete this procedure.

To create a sub-allocation in an existing resource allocation
  1. Open Windows System Resource Manager. To open Windows System Resource Manager, click Start, point to Administrative Tools, and then click Windows System Resource Manager.

  2. In the Connect to Computer dialog box, select This computer, and then click Connect.

  3. In the console tree, expand Resource Allocation Policies, right-click the name of the resource allocation policy that contains the resource allocation where you want to create a sub-allocation, and then click Properties.

  4. On the Resources tab, under Allocate these resources, click the name of the resource allocation where you want to create a sub-allocation, and then click Edit.

  5. On the Advanced tab, click Sub-allocate resources.

  6. In the Sub-allocate Resources dialog box, click Add.

  7. Follow the steps to create a resource allocation. For step-by-step instructions, see the procedures in Create a New Resource Allocation Policy. When you are finished, click OK.

  8. You can create as many sub-allocations as you need.

    • You can create more sub-allocations under the parent resource allocation by clicking Sub-allocate resources again.

    • To create sub-allocations under a sub-allocation, click Sub-allocate resources, click the sub-allocation that you want to further sub-allocate, click Edit, and then continue from Step 3 of this procedure.

  9. When you are finished creating sub-allocations, on the parent resource allocation Properties page, click OK.

Example sub-allocations

Sub-allocating resources among multiple server functions

One situation in which you would use sub-allocation is when you have a single server that performs multiple functions. Each of the functions is equally important, and multiple applications run to complete each function.

You can configure a single resource allocation with multiple child sub-allocations, each with its own relative allocation. In this way, you can create a hierarchy.

The following table gives an example of how you can use simple sub-allocation to divide resources within a resource allocation policy. This example illustrates how to allocate resources among a group of processes that perform a function for which you want to reserve 50 percent of the total available CPU bandwidth, while leaving the other 50 percent for remaining processes.

Each allocation or sub-allocation is listed in the order in which you would create it.

Allocation or sub-allocation Properties

Resource allocation ra_A

  • 50% of available CPU

  • Applies to process matching criterion pmc_A

The parent resource allocation that is further divided by its sub-allocations. The parent allocation is applied last. Thus, any resources that are not consumed by its sub-allocations will be available to processes that match pmc_A.

Sub-allocation sub_B

  • 20% of CPU allocated by ra_A

  • Applies to process matching criterion pmc_B

The first sub-allocation of ra_A. Processes that match pmc_B can use up to 10 percent of the total CPU bandwidth (20 percent of the 50 percent available to ra_A).

Sub-allocation sub_C

  • 30% of CPU allocated by ra_A

  • Applies to process matching criterion pmc_C

The second sub-allocation of ra_A. Processes that match pmc_C can use up to 15 percent of the total CPU bandwidth (30 percent of the 50 percent available to ra_A).

Resource allocation ra_D

  • 50% of available CPU

  • Applies to the Residual process matching criterion.

A resource allocation on the same level in the hierarchy as ra_A. Processes that do not match another process matching criterion can consume up to 50 percent of the total available CPU bandwidth.

Because the sub-allocations in the example add up to 50 percent of the parent resource allocation, processes that match pmc_A can use a minimum of 25 percent of the total CPU bandwidth, or 50 percent of the 50 percent available to ra_A.

Prioritizing processes by using sub-allocations

Another situation in which you would use sub-allocations is when you have a server that performs multiple functions that you want to prioritize according to their importance. Because the resources not used by a sub-allocation become available to its parent resource allocation, you can use this built-in logic to prioritize processes by using sub-allocations.

To prioritize processes, create a series of nested sub-allocations in order from the last resource allocation you want to apply (the parent resource allocation) to the first resource allocation you want to apply (the last sub-allocation), giving each allocation 99 percent CPU.

Each resource allocation and sub-allocation is given 99 percent of the available CPU because the goal is not to restrict CPU usage, but to define the order in which processes get access to CPU bandwidth.

The following table gives an example of how you can prioritize processes by using sub-allocations. Each allocation or sub-allocation is listed in the order in which you would create it.

Allocation or sub-allocation Properties

Resource allocation LowestPriority

  • 99% of available CPU

  • Matches process matching criterion LeastImportant

The parent resource allocation that is further divided by its sub-allocations. The parent resource allocation is applied last. Thus, any resources that are not consumed by its sub-allocations will be available to processes that match LeastImportant.

Sub-allocation MediumPriority

  • Sub-allocation of LowestPriority

  • 99% of CPU allocated by LowestPriority

  • Matches process matching criterion AvgImportant

The only sub-allocation of LowestPriority. It is applied before LowestPriority and after HighestPriority. Any resources that are not consumed by MediumPriority will be available to LowestPriority.

Sub-allocation HighestPriority

  • Sub-allocation of MediumPriority

  • 99% of CPU allocated by MediumPriority

  • Matches process matching criterion MostImportant

The only sub-allocation of MediumPriority. As the last sub-allocation, it is applied first. Any resources that are not consumed by HighestPriority will be available to MediumPriority.

In the example, processes are not constrained to a fixed amount of CPU bandwidth. Instead, processes to which the last sub-allocation applies get as much CPU bandwidth as they can consume, and the remaining CPU bandwidth is distributed among other competing processes in order moving back up the chain.

Additional references