Solaris Fair Share Scheduling and Projects

Scheduling_solutions_small_355048

Solaris FSS is a method of resource sharing and allocation based on the importance of a process. Specifically a SHARE is a portion of a CPUs resources. In the instance below I was asked to setup FSS and Projects so that two low priority test databases could run along side production databases without any risk of impact.

First off its work nothing that FSS is not always installed by default, you need to ensure that you have the package, SUNWfss.

pkginfo SUNWfss

You are looking for the response below

system      SUNWfss Fair Share Schedule system      SUNWfss Fair Share Schedule

 Ok, since I have several databases running on each box, I am going to make this easy on myself and create two NIS groups, one that the production database users will belong to and one that the non-production, or low priority databases will belong to. The two groups that I created are ora-high and ora-low. This should be self explanitory. Once created in NIS and given access to the box, the xext step is to add ourprojects.

The two examples below define projects by groups.

#projadd -c "Oracle high priority project" group.ora-high

#projadd -c "Oracle low priority project" group.ora-low

 

Now view your new projects.

#projects -l

 

Use the command below to see what projects a user id is part of.

#id -p <userid>

 Now that the projects are created, go ahead and change the system scheduling to use Solaris FSS. This change will require a reboot.

# ps -cafe

# dispadmin -d FSS

# priocntl -s -c FSS -i class TS

# priocntl -s -c FSS -i pid 1

# ps –café

 

* "ps -cafe" – shows all processes and there scheduler class. Time Sharing is the default class, btw

* "dispadmin -d FSS" – sets the default scheduling class to be used on reboot to FSS

* "priocntl -s -c FSS -i class TS" – changes all current process with TS class to FSS class

 * "priocntl -s -c FSS -i pid 1" – changes the /sbin/init process to FSS class

 

Now you need to set the CPU shares per project.

Note that the number of CPU shares always equates to 100. The actual number of shares is irrelevant, its the relationship between the shares that is important.

So..

If we only have two sets of shares allocated ( 99 & 1 ) the percentage if one wanted to calculate it would be : 99 shares = 99 / (99+1) * 100 = 99% and 1 share = 1 / (99+1) * 100 = 1% .

Note that one of the commands below sets the cpu shares on the fly, and the other one adds the setting to the /etc/project file so that the setting is persistent across reboots.

# prctl -n project.cpu-shares -r -v 99 -i project  group.ora-high

# prctl -n project.cpu-shares -r -v 1 -i project group.ora-low

# projmod -sK “project.cpu-shares=(privileged,1,none)” group.ora-low

# projmod -sK “project.cpu-shares=(privileged,99,none)” group.ora-high

 

Just as a side note, prstat -J will show resources utilization by project

 

If there are any issues the backout process is simple.

First comment out the entries new entries from /etc/project.

# dispadmin -d TS

# priocntl -s -c TS -i class FSS

# priocntl -s -c TS -i pid 1

 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.