FairShare Recommendations

Initially: Do Nothing

The first recommendation is to do nothing. Start with the simplest FairShare tree, where every job belongs to the fsgroup /time/users.USERNAME where USERNAME is of course the owner of the job. This means that CPU cycles are allocated to all users in equal parts.

Later: Design a FairShare Tree for Both Applications and Projects

Over time, as you acquire experience in FairShare, you may want to design a more complex FairShare tree, one that accounts for allocations of expensive licenses and for all the projects going on in your organization.

Our recommendation is to organize your FairShare tree first by application, then by project, so that a typical name for a FairShare group could be /class/spice/ChipA.joe
## Example of design of a production fairshare tree.
## This file could be  vnc.swd/fairshare/main_fs_tree.tcl

set listOfApps     "spice dc pt"
set listOfProjects "X3 X5 X8 RT SW chameleon"
FSGROUP / -w 0 -t 1h {
    foreach app $listOfApps {
         FSGROUP $app  -w 100 -t 1h  {
               foreach proj $listOfProjects {
                    FSGROUP $proj -w 100 -t 1h {} 
               }
               FSGROUP other  -w 10 {}  ;#  All jobs not in a project
               FSGROUP default -w 1 {}  ;#  In case a new projects appear, give a small weight 
         }       
    }
    FSGROUP extra   -w 10 -t 1h {}      ;# All jobs not in an app.
    FSGROUP default -w 1        {}      ;# In case new apps appear, give them a small weight.
}
To load this FairShare tree, use:
% vovfsgroup delete -unused
% vovfsgroup loadconfig .../main_fs_tree.tcl

This will add the tree in addition to all currently used groups in your system.

The users would then submit jobs using the appropriate fsgroup, for example with:
% nc run -g /app/spice/chameleon -r License:spice -- myspice -i ckt.spi
To simplify the submission, we also recommend using Jobclasses, where both resources and FairShare groups can be defined together, as in the following example:
# This could be file  vnc.swd/jobclass/spice.tcl
set VOV_JOB_DESC(resources)  "License:spice RAM/200"
set VOV_JOB_DESC(group)      "/app/spice/$env(PROJECT)"
With the jobclass, the submission is greatly simplified:
% nc run -C spice myspice -i ckt.spi
At some point, it may happen that one project enters a critical phase, e.g. the tapeout of a chip, so it may benefit from a larger share of resources. This can be achieved by changing the weights of all fsgroups for that project, for example with a script like this which sets all fsgroups for project "chameleon" to 300:
# Assuming C-shell syntax
foreach g ( `vovselect fullname from fairshare -where name==chameleon`)
   vovfsgroup modify $g weight 300 
end