Print this page
12144 Convert Intro(7) to mandoc
12145 Convert cpr(7) to mandoc
12146 Convert ibmf(7) to mandoc
12147 Convert FSS(7) to mandoc
Reviewed by: Peter Tribble <peter.tribble@gmail.com>
   1 '\" te
   2 .\" Copyright (c) 2001, Sun Microsystems, Inc. All Rights Reserved
   3 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
   4 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
   5 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
   6 .TH FSS 7 "May 13, 2017"
   7 .SH NAME
   8 FSS \- Fair share scheduler
   9 .SH DESCRIPTION
  10 .LP
















  11 The fair share scheduler (FSS) guarantees application performance by explicitly
  12 allocating shares of CPU resources to projects. A share indicates a project's
  13 entitlement to available CPU resources. Because shares are meaningful only in


  14 comparison with other project's shares, the absolute quantity of shares is not
  15 important. Any number that is in proportion with the desired CPU entitlement

  16 can be used.
  17 .sp
  18 .LP
  19 The goals of the FSS scheduler differ from the traditional time-sharing
  20 scheduling class (TS). In addition to scheduling individual LWPs, the FSS

  21 scheduler schedules projects against each other, making it impossible for any
  22 project to acquire more CPU cycles simply by running more processes
  23 concurrently.
  24 .sp
  25 .LP
  26 A project's entitlement is individually calculated by FSS independently for
  27 each processor set if the project contains processes bound to them. If a

  28 project is running on more than one processor set, it can have different
  29 entitlements on every set. A project's entitlement is defined as a ratio

  30 between the number of shares given to a project and the sum of shares of all
  31 active projects running on the same processor set. An active project is one
  32 that has at least one running or runnable process. Entitlements are recomputed


  33 whenever any project becomes active or inactive, or whenever the number of
  34 shares is changed.
  35 .sp
  36 .LP
  37 Processor sets represent virtual machines in the FSS scheduling class and
  38 processes are scheduled independently in each processor set. That is, processes

  39 compete with each other only if they are running on the same processor set.
  40 When a processor set is destroyed, all processes that were bound to it are
  41 moved to the default processor set, which always exists. Empty processor sets

  42 (that is, sets without processors in them) have no impact on the FSS scheduler
  43 behavior.
  44 .sp
  45 .LP
  46 If a processor set contains a mix of TS/IA and FSS processes, the fairness of
  47 the FSS scheduling class can be compromised because these classes use the same
  48 range of priorities. Fairness is most significantly affected if processes

  49 running in the TS scheduling class are CPU-intensive and are bound to
  50 processors within the processor set. As a result, you should avoid having
  51 processes from TS/IA and FSS classes share the same processor set. RT and FSS


  52 processes use disjoint priority ranges and therefore can share processor sets.
  53 .sp
  54 .LP
  55 As projects execute, their CPU usage is accumulated over time. The FSS
  56 scheduler periodically decays CPU usages of every project by multiplying it
  57 with a decay factor, ensuring that more recent CPU usage has greater weight
  58 when taken into account for scheduling. The FSS scheduler continually adjusts

  59 priorities of all processes to make each project's relative CPU usage converge
  60 with its entitlement.
  61 .sp
  62 .LP
  63 While FSS is designed to fairly allocate cycles over a long-term time period,
  64 it is possible that projects will not receive their allocated shares worth of
  65 CPU cycles due to uneven demand. This makes one-shot, instantaneous analysis of

  66 FSS performance data unreliable.
  67 .sp
  68 .LP
  69 Note that share is not the same as utilization. A project may be allocated 50%
  70 of the system, although on the average, it uses just 20%. Shares serve to cap a

  71 project's CPU usage only when there is competition from other projects running
  72 on the same processor set. When there is no competition, utilization may be
  73 larger than entitlement based on shares. Allocating a small share to a busy


  74 project slows it down but does not prevent it from completing its work if the
  75 system is not saturated.
  76 .sp
  77 .LP
  78 The configuration of CPU shares is managed by the name server as a property of
  79 the \fBproject\fR(4) database. In the following example, an entry in the
  80 \fB/etc/project\fR file sets the number of shares for project \fBx-files\fR to
  81 10:
  82 .sp
  83 .in +2
  84 .nf



  85 x-files:100::::project.cpu-shares=(privileged,10,none)
  86 .fi
  87 .in -2
  88 
  89 .sp
  90 .LP
  91 Projects with undefined number of shares are given one share each. This means
  92 that such projects are treated with equal importance. Projects with 0 shares
  93 only run when there are no projects with non-zero shares competing for the same
  94 processor set. The maximum number of shares that can be assigned to one project

  95 is 65535.
  96 .sp
  97 .LP
  98 You can use the \fBprctl\fR(1) command to determine the current share

  99 assignment for a given project:
 100 .sp
 101 .in +2
 102 .nf
 103 $ prctl -n project.cpu-shares -i project x-files
 104 .fi
 105 .in -2
 106 
 107 .sp
 108 .LP
 109 or to change the amount of shares if you have root privileges:
 110 .sp
 111 .in +2
 112 .nf
 113 # prctl -r -n project.cpu-shares -v 5 -i project x-files
 114 .fi
 115 .in -2
 116 
 117 .sp
 118 .LP
 119 See the \fBprctl\fR(1) man page for additional information on how to modify and
 120 examine resource controls associated with active processes, tasks, or projects
 121 on the system. See \fBresource_controls\fR(5) for a description of the resource



 122 controls supported in the current release of the Solaris operating system.
 123 .sp
 124 .LP
 125 By default, project \fBsystem\fR (project ID 0) includes all system daemons
 126 started by initialization scripts and has an "unlimited" amount of shares. That




 127 is, it is always scheduled first no matter how many shares are given to other
 128 projects.
 129 .sp
 130 .LP
 131 The following command sets FSS as the default scheduler for the system:
 132 .sp
 133 .in +2
 134 .nf
 135 # dispadmin -d FSS
 136 .fi
 137 .in -2
 138 
 139 .sp
 140 .LP
 141 This change will take effect on the next reboot. Alternatively, you can move
 142 processes from the time-share scheduling class (as well as the special case of
 143 init) into the FSS class without changing your default scheduling class and
 144 rebooting by becoming \fBroot\fR, and then using the \fBpriocntl\fR(1) command,
 145 as shown in the following example:
 146 .sp
 147 .in +2
 148 .nf

 149 # priocntl -s -c FSS -i class TS
 150 # priocntl -s -c FSS -i pid 1
 151 .fi
 152 .in -2
 153 
 154 .SH CONFIGURING SCHEDULER WITH DISPADMIN
 155 .LP
 156 You can use the \fBdispadmin\fR(1M) command to examine and tune the FSS
 157 scheduler's time quantum value. Time quantum is the amount of time that a
 158 thread is allowed to run before it must relinquish the processor. The following

 159 example dumps the current time quantum for the fair share scheduler:
 160 .sp
 161 .in +2
 162 .nf
 163 $ dispadmin -g -c FSS
 164         #
 165         # Fair Share Scheduler Configuration
 166         #
 167         RES=1000
 168         #
 169         # Time Quantum
 170         #
 171         QUANTUM=110
 172 .fi
 173 .in -2
 174 
 175 .sp
 176 .LP
 177 The value of the QUANTUM represents some fraction of a second with the
 178 fractional value determined by the reciprocal value of RES. With the default
 179 value of RES = 1000, the reciprocal of 1000 is .001, or milliseconds. Thus, by


 180 default, the QUANTUM value represents the time quantum in milliseconds.
 181 .sp
 182 .LP
 183 If you change the RES value using \fBdispadmin\fR with the \fB-r\fR option, you
 184 also change the QUANTUM value. For example, instead of quantum of 110 with RES
 185 of 1000, a quantum of 11 with a RES of 100 results. The fractional unit is
 186 different while the amount of time is the same.
 187 .sp
 188 .LP
 189 You can use the \fB-s\fR option to change the time quantum value. Note that
 190 such changes are not preserved across reboot. Please refer to the
 191 \fBdispadmin\fR(1M) man page for additional information.
 192 
 193 .SH SEE ALSO
 194 .LP
 195 \fBprctl\fR(1), \fBpriocntl\fR(1), \fBdispadmin\fR(1M), \fBpsrset\fR(1M),
 196 \fBpriocntl\fR(2), \fBproject\fR(4), \fBresource_controls\fR(5)
 197 .sp
 198 .LP
 199 \fISystem Administration Guide:  Virtualization Using the Solaris Operating
 200 System\fR








   1 .\" Copyright (c) 2001, Sun Microsystems, Inc. All Rights Reserved
   2 .\" Copyright 2019 Joyent, Inc.
   3 .\"
   4 .\" The contents of this file are subject to the terms of the
   5 .\" Common Development and Distribution License (the "License").
   6 .\" You may not use this file except in compliance with the License.
   7 .\"
   8 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9 .\" or http://www.opensolaris.org/os/licensing.
  10 .\" See the License for the specific language governing permissions
  11 .\" and limitations under the License.
  12 .\"
  13 .\" When distributing Covered Code, include this CDDL HEADER in each
  14 .\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15 .\" If applicable, add the following below this CDDL HEADER, with the
  16 .\" fields enclosed by brackets "[]" replaced with your own identifying
  17 .\" information: Portions Copyright [yyyy] [name of copyright owner]
  18 .\"
  19 .Dd December 17, 2019
  20 .Dt FSS 7
  21 .Os
  22 .Sh NAME
  23 .Nm FSS
  24 .Nd Fair share scheduler
  25 .Sh DESCRIPTION
  26 The fair share scheduler (FSS) guarantees application performance by explicitly
  27 allocating shares of CPU resources to projects.
  28 A share indicates a project's
  29 entitlement to available CPU resources.
  30 Because shares are meaningful only in
  31 comparison with other project's shares, the absolute quantity of shares is not
  32 important.
  33 Any number that is in proportion with the desired CPU entitlement
  34 can be used.
  35 .Pp

  36 The goals of the FSS scheduler differ from the traditional time-sharing
  37 scheduling class (TS).
  38 In addition to scheduling individual LWPs, the FSS
  39 scheduler schedules projects against each other, making it impossible for any
  40 project to acquire more CPU cycles simply by running more processes
  41 concurrently.
  42 .Pp

  43 A project's entitlement is individually calculated by FSS independently for
  44 each processor set if the project contains processes bound to them.
  45 If a
  46 project is running on more than one processor set, it can have different
  47 entitlements on every set.
  48 A project's entitlement is defined as a ratio
  49 between the number of shares given to a project and the sum of shares of all
  50 active projects running on the same processor set.
  51 An active project is one
  52 that has at least one running or runnable process.
  53 Entitlements are recomputed
  54 whenever any project becomes active or inactive, or whenever the number of
  55 shares is changed.
  56 .Pp

  57 Processor sets represent virtual machines in the FSS scheduling class and
  58 processes are scheduled independently in each processor set.
  59 That is, processes
  60 compete with each other only if they are running on the same processor set.
  61 When a processor set is destroyed, all processes that were bound to it are
  62 moved to the default processor set, which always exists.
  63 Empty processor sets
  64 (that is, sets without processors in them) have no impact on the FSS scheduler
  65 behavior.
  66 .Pp

  67 If a processor set contains a mix of TS/IA and FSS processes, the fairness of
  68 the FSS scheduling class can be compromised because these classes use the same
  69 range of priorities.
  70 Fairness is most significantly affected if processes
  71 running in the TS scheduling class are CPU-intensive and are bound to
  72 processors within the processor set.
  73 As a result, you should avoid having
  74 processes from TS/IA and FSS classes share the same processor set.
  75 RT and FSS
  76 processes use disjoint priority ranges and therefore can share processor sets.
  77 .Pp
  78 As projects execute, their CPU usage is accumulated over time.
  79 The FSS
  80 scheduler periodically decays CPU usages of every project by multiplying it
  81 with a decay factor, ensuring that more recent CPU usage has greater weight
  82 when taken into account for scheduling.
  83 The FSS scheduler continually adjusts
  84 priorities of all processes to make each project's relative CPU usage converge
  85 with its entitlement.
  86 .Pp

  87 While FSS is designed to fairly allocate cycles over a long-term time period,
  88 it is possible that projects will not receive their allocated shares worth of
  89 CPU cycles due to uneven demand.
  90 This makes one-shot, instantaneous analysis of
  91 FSS performance data unreliable.
  92 .Pp
  93 Note that share is not the same as utilization.
  94 A project may be allocated 50%
  95 of the system, although on the average, it uses just 20%.
  96 Shares serve to cap a
  97 project's CPU usage only when there is competition from other projects running
  98 on the same processor set.
  99 When there is no competition, utilization may be
 100 larger than entitlement based on shares.
 101 Allocating a small share to a busy
 102 project slows it down but does not prevent it from completing its work if the
 103 system is not saturated.
 104 .Pp

 105 The configuration of CPU shares is managed by the name server as a property of
 106 the
 107 .Xr project 4
 108 database.
 109 In the following example, an entry in the
 110 .Pa /etc/project
 111 file sets the number of shares for project
 112 .Sy x-files
 113 to 10:
 114 .Bd -literal -offset 2n
 115 x-files:100::::project.cpu-shares=(privileged,10,none)
 116 .Ed
 117 .Pp
 118 Projects with undefined number of shares are given one share each.
 119 This means
 120 that such projects are treated with equal importance.
 121 Projects with 0 shares

 122 only run when there are no projects with non-zero shares competing for the same
 123 processor set.
 124 The maximum number of shares that can be assigned to one project
 125 is 65535.
 126 .Pp
 127 You can use the
 128 .Xr prctl 1
 129 command to determine the current share
 130 assignment for a given project:
 131 .Bd -literal -offset 2n


 132 $ prctl -n project.cpu-shares -i project x-files
 133 .Ed
 134 .Pp



 135 or to change the amount of shares if you have root privileges:
 136 .Bd -literal -offset 2n


 137 # prctl -r -n project.cpu-shares -v 5 -i project x-files
 138 .Ed
 139 .Pp
 140 See the
 141 .Xr prctl 1
 142 man page for additional information on how to modify and

 143 examine resource controls associated with active processes, tasks, or projects
 144 on the system.
 145 See
 146 .Xr resource_controls 5
 147 for a description of the resource
 148 controls supported in the current release of the Solaris operating system.
 149 .Pp
 150 By default, project
 151 .Sy system
 152 (project ID 0) includes all system daemons
 153 started by initialization scripts and has an
 154 .Dq unlimited
 155 amount of shares.
 156 That
 157 is, it is always scheduled first no matter how many shares are given to other
 158 projects.
 159 .Pp

 160 The following command sets FSS as the default scheduler for the system:
 161 .Bd -literal -offset 2n


 162 # dispadmin -d FSS
 163 .Ed
 164 .Pp
 165 This change will take effect on the next reboot.
 166 Alternatively, you can move


 167 processes from the time-share scheduling class (as well as the special case of
 168 init) into the FSS class without changing your default scheduling class and
 169 rebooting by becoming
 170 .Sy root ,
 171 and then using the
 172 .Xr priocntl 1
 173 command, as shown in the following example:
 174 .Bd -literal -offset 2n
 175 # priocntl -s -c FSS -i class TS
 176 # priocntl -s -c FSS -i pid 1
 177 .Ed
 178 .Sh CONFIGURING SCHEDULER WITH DISPADMIN
 179 You can use the
 180 .Xr dispadmin 1M
 181 command to examine and tune the FSS
 182 scheduler's time quantum value.
 183 Time quantum is the amount of time that a
 184 thread is allowed to run before it must relinquish the processor.
 185 The following
 186 example dumps the current time quantum for the fair share scheduler:
 187 .Bd -literal -offset 2n


 188 $ dispadmin -g -c FSS
 189         #
 190         # Fair Share Scheduler Configuration
 191         #
 192         RES=1000
 193         #
 194         # Time Quantum
 195         #
 196         QUANTUM=110
 197 .Ed
 198 .Pp



 199 The value of the QUANTUM represents some fraction of a second with the
 200 fractional value determined by the reciprocal value of RES.
 201 With the default
 202 value of RES = 1000, the reciprocal of 1000 is \&.001, or milliseconds.
 203 Thus, by
 204 default, the QUANTUM value represents the time quantum in milliseconds.
 205 .Pp
 206 If you change the RES value using
 207 .Xr dispadmin 1M
 208 with the
 209 .Fl r
 210 option, you also change the QUANTUM value.
 211 For example, instead of quantum of 110 with RES
 212 of 1000, a quantum of 11 with a RES of 100 results.
 213 The fractional unit is different while the amount of time is the same.
 214 .Pp
 215 You can use the
 216 .Fl s
 217 option to change the time quantum value.
 218 Note that such changes are not preserved across reboot.
 219 Please refer to the
 220 .Xr dispadmin 1M
 221 man page for additional information.
 222 .Sh SEE ALSO
 223 .Xr prctl 1 ,
 224 .Xr priocntl 1 ,
 225 .Xr dispadmin 1M ,
 226 .Xr psrset 1M ,
 227 .Xr priocntl 2 ,
 228 .Xr project 4 ,
 229 .Xr resource_controls 5
 230 .Pp
 231 .%T System Administration Guide: Virtualization Using the Solaris Operating System