A. Introduction
This case slightly alters the behavior of dispadmin(1M)'s '-d' option,
and adds a new -u option. A portion of the case describes the background
and design considerations; these are provided to justify the new
interfaces, but should be regarded as implementation detail.
The case seeks minor release binding and will be delivered concurrently
with the Greenline project [1].
The stability of the -d option is already 'evolving', and this does not
change as part of this case [2]. The stability of the new -u option is
requested to be consolidation private, as it is only needed at system
bootup, and is not useful thereafter.
B. Interface Table
Interface Stability Notes
---------------------------------------------------------------------
dispadmin -d Evolving Minor behavior change
dispadmin -u Consolidation Private New interface
C. Background
The advent of Solaris Zones [3] caused a minor problem with scheduling
classes and zones [4].
In short, the problem is that when booting up a zone, the zones
infrastructure does not reset the scheduling class to the system
default. Instead, whatever scheduling class is in use by the launching
process is used, due to the inheritance of scheduling class across
fork(2).
Greenline alters and exacerbates this problem, because zone bootup has
been reworked to cope with the contract subsystem [5]. Briefly,
init(1M) for a zone is now launched directly from the kernel (mirroring
the launch of the global zone's init daemon) when the zone is booted;
previously, init was launched via fork(2) and zone_enter(2) from the
global zone.
D. Solution
We propose that the kernel should be informed of the default scheduling
class for the system when that setting is altered. When dispadmin -d is
run, the kernel is now updated with the new default class setting; when
zones are subsequently booted or rebooted, they will be impacted by the
new default class setting, as init(1M) will be launched in the new
default class. This makes sense-- the granularity of the dispadmin
change is "the reboot" (and whether that is "the reboot" of a zone or of
the global zone does not matter).
Finally, at boot time, a new dispadmin flag (-u, mirroring similar flags
in dumpadm(1M) and coreadm(1M)) is needed to inform the kernel about the
administrator's choice of default scheduling class, if any.
E. Proposed Manual Page Changes
@@ -48,8 +48,9 @@
scheduling class is displayed. If class name is speci-
fied and is a valid scheduling class name, then it is
saved in dispadmin's private configuration file
- /etc/dispadmin.conf. Only super-users can set the
- default scheduling class.
+ /etc/dispadmin.conf. Subsequent to setting the default
+ class, booting or rebooting non-global zones will cause
+ those zones to run using the new default class setting.
+ Only super-users can set the default scheduling class.
-g Gets the parameters for the specified class and writes
them to the standard output. Parameters for the real-
F. References
1. PSARC/2002/547, Greenline
2. PSARC/2000/452, Revised Share Scheduler.
3. PSARC 2002/174, Virtualization and Namespace Isolation in Solaris
4. Bug 5004847 "'init' in non-global zones should follow system default
scheduling class"
5. PSARC 2003/193, Solaris Contracts