Resource Governor and Resource Pool CPU Utilization Configuration

All we need is an easy explanation of the problem, so here it is.

I have been trying to understand more in-depth how the resource governor resource pool limits work in conjunction with multiple user defined pools.

I’ve been trying to follow along the table in this MS doc: Resource Governor Resource Pool

But the formula explanations are a little vague (to my eyes) so I’m trying to make sure I am calculating the effective max and shared % numbers correctly.

Resource Governor and Resource Pool CPU Utilization Configuration

The formulas in the comment column are for calculated effective max. Shared % seems fairly straightforward and dependent on the accuracy of the effective max. My questions are as follows:

  1. Do user defined resource pools consider the default pool in their calculations? I assumed they do because the default pool (from the MS example) considers the MIN values of user pools for the default pool calculation.
  2. Is it nonsensical as I believe for the SUM of all calculated shared % to be >100%? The MS examples all fall below 100%.
  3. Could someone please explain this blurb on shared % from the MS docs, I’m not fully understanding what the shared % calculation is supposed to represent:

The shared part of the pool is used to indicate where available
resources can go if resources are available. However, when resources
are consumed they go to the specified pool and are not shared. This
may improve resource utilization in cases where there are no
requests in a given pool and the resources configured to the pool
can be freed up for other pools.

Lastly, the documentation mentions extreme cases of pool configuration and calls this out:

All pools have zero minimums. All the pools compete for available resources and their final sizes are based on resource consumption in each pool. Other factors such as policies play a role in shaping the final pool size.

Is that an accurate summation of the proposed pool configuration I have screencapped above? Hypothetically, this pool configuration would then allow the server to max out CPU and not meter CPU utilization as I intend, correct?

Thanks for the help.

How to solve :

I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.

Method 1

Question 1

Do user defined resource pools consider the default pool in their
calculations?

Yes, they do. You can verify it by editing the minimum CPU for the default pool and trying to add another pool later that exceeds the sum of 100. If you tried, you should see the error Sum of the minimum CPU percentages must not exceed 100:

Resource Governor and Resource Pool CPU Utilization Configuration

Just be careful if you decide to use this pool in production with a configuration different from the default one as it receives all the process that was not specified to another existing pool.

Question 2

Is it nonsensical as I believe for the SUM of all calculated shared %
to be >100%? The MS examples all fall below 100%.

There’s a difference between the MIN% and the Calculated Shared % concepts regarding the Resource Pool:

  • The MIN% is an amount of CPU that once you define for a pool, it’s
    not gonna be available for any other. So, if you define 5 for Pool
    B
    , you only have 95 that can be used for other pools. Those 5 won’t
    be shared. That sum is calculated among all existing pools.
  • The Calculated Shared % is the difference between the MIN% and
    the MAX% on the same pool, not among all existing pools as above.
    Pool B was defined with a MAX% of 10, then you have to subtract 5 (the amount it won’t share with anyone) from 10 (the max amount of
    CPU it’s supposed to use if available and not required from some
    other pool).

Question 3

Could someone please explain this blurb on shared % from the MS docs,
I’m not fully understanding what the shared % calculation is supposed
to represent:

It’s related to what I said before: the MIN% value states how much CPU a pool owns and won’t borrow to any other pool even if it’s not processing anything and the 5% CPU is idle while the whole instance is on peak time consuming 95% and starving for 5% more. Share on the context of that excerpt means the difference between the MIN% and the MAX% of the same pool. That’s why Pool C can share 50% and it means that if Pool C was idle, it would release all the CPU it is allowed to use so that other pools can consume it.

Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply