I saw versions of these images in Charu’s presentation slide deck a long time ago. They did a good job visually explaining the scheduling behavior differences in Grid Engine Sharetree vs Functional share policies. Now that they appear in a publicly accessible PDF file1 I can shamelessly excerpt them:
Click the “Read more” link for more information and bigger versions of the images …
The key bit of information here is to note how the entitlement shares allowed to Project B actually dip BELOW the 50% threshold in the later stages of the time series. This is because the SGE Scheduler “remembers” past usage (see earlier in the graphic where Project B is using WAY MORE than 50% of available cluster resources) and is compensating Project A for the previous excess usage of Project B. Over time, as the graph shows, the SGE Scheduler works to bring harmony to the assigned 50-50 split of cluster resources between two projects.
Functional policy behavior
The key bit of information here concerning the functional share policy is that there is no “memory” of past usage by Project B. Early on in the time series, Project B is allowed to take advantage of “extra” available idle resources. As soon as Project A starts wanting to do work again, the Grid Engine scheduler starts enforcing the 50-50 entitlement split. Project A never gets “compensated” for letting Project B use more than its allocated share because the Grid Engine scheduler does not consider past usage within the Functional policy.
The Sharetree Policy “remembers” past usage and works to enforce the configured resource allocation entitlements as averaged over time. This may include compensating some users/groups/projects temporarily with “extra” entitlements to make up for times when other users/groups/projects were using more than their configured entitlements.
The Functional Policy will also allow “extra” entitlements if cluster resources are idle or otherwise available. It will not, however, penalize or compensate anyone for prior usage. When things are busy, the scheduler will attempt to enforce it’s allocation policies exactly as they have been configured.
I wrote a mini-Howto showing how to do percentage based resource allocation between different Department groups on a Grid Engine cluster. You can find it online at http://bioteam.net/dag/sge6-funct-share-dept.html. There is some additional information there about the different scheduling polices that may or may not be of some use.