Configuration Constraints and Objectives
When making changes to a configuration, poold acts on directions that you provide.
You specify these directions as a series of constraints and objectives. poold uses
your specifications to determine the relative value of different configuration possibilities in relation to
the existing configuration. poold then changes the resource assignments of the current configuration
to generate new candidate configurations.
Configuration Constraints
Constraints affect the range of possible configurations by eliminating some of the potential
changes that could be made to a configuration. The following constraints, which are
specified in the libpool configuration, are available.
The minimum and maximum CPU allocations
Pinned components that are not available to be moved from a set
The importance factor of the pool
See the libpool(3LIB) man page and Pools Properties for more information about pools properties.
See How to Set Configuration Constraints for usage instructions.
pset.min Property and pset.max Property Constraints
These two properties place limits on the number of processors that can be
allocated to a processor set, both minimum and maximum. See Table 12-1 for
more details about these properties.
Within these constraints, a resource partition's resources are available to be allocated to
other resource partitions in the same Solaris instance. Access to the resource is
obtained by binding to a pool that is associated with the resource set.
Binding is performed at login or manually by an administrator who has the
PRIV_SYS_RES_CONFIG privilege.
cpu.pinned Property Constraint
The cpu-pinned property indicates that a particular CPU should not be moved by
DRP from the processor set in which it is located. You can set
this libpool property to maximize cache utilization for a particular application that is
executing within a processor set.
See Table 12-1 for more details about this property.
pool.importance Property Constraint
The pool.importance property describes the relative importance of a pool as defined by
the administrator.
Configuration Objectives
Objectives are specified similarly to constraints. The full set of objectives is documented
in Table 12-1.
There are two categories of objectives.
- Workload dependent
A workload-dependent objective is an objective that will vary according to the nature of the workload running on the system. An example is the utilization objective. The utilization figure for a resource set will vary according to the nature of the workload that is active in the set.
- Workload independent
A workload-independent objective is an objective that does not vary according to the nature of the workload running on the system. An example is the CPU locality objective. The evaluated measure of locality for a resource set does not vary with the nature of the workload that is active in the set.
You can define three types of objectives.
Name |
Valid Elements |
Operators |
Values |
wt-load |
system |
N/A |
N/A |
locality |
pset |
N/A |
loose | tight | none |
utilization |
pset |
<
> ~ |
0–100% |
Objectives are stored in property strings in the libpool configuration. The property names
are as follows:
system.poold.objectives
pset.poold.objectives
Objectives have the following syntax:
All objectives take an optional importance prefix. The importance acts as a multiplier
for the objective and thus increases the significance of its contribution to the
objective function evaluation. The range is from 0 to INT64_MAX (9223372036854775807). If not
specified, the default importance value is 1.
Some element types support more than one type of objective. An example is
pset. You can specify multiple objective types for these elements. You can also
specify multiple utilization objectives on a single pset element.
See How to Define Configuration Objectives for usage examples.
wt-load Objective
The wt-load objective favors configurations that match resource allocations to resource utilizations. A
resource set that uses more resources will be given more resources when this
objective is active. wt-load means weighted load.
Use this objective when you are satisfied with the constraints you have established
using the minimum and maximum properties, and you would like the daemon to
manipulate resources freely within those constraints.
The locality Objective
The locality objective influences the impact that locality, as measured by locality group
(lgroup) data, has upon the selected configuration. An alternate definition for locality is latency.
An lgroup describes CPU and memory resources. The lgroup is used by the
Solaris system to determine the distance between resources, using time as the measurement.
For more information on the locality group abstraction, see Locality Groups Overview in Programming Interfaces Guide.
This objective can take one of the following three values:
- tight
If set, configurations that maximize resource locality are favored.
- loose
If set, configurations that minimize resource locality are favored.
- none
If set, the favorableness of a configuration is not influenced by resource locality. This is the default value for the locality objective.
In general, the locality objective should be set to tight. However, to maximize
memory bandwidth or to minimize the impact of DR operations on a resource
set, you could set this objective to loose or keep it at
the default setting of none.
utilization Objective
The utilization objective favors configurations that allocate resources to partitions that are not
meeting the specified utilization objective.
This objective is specified by using operators and values. The operators are as
follows:
- <
The “less than” operator indicates that the specified value represents a maximum target value.
- >
The “greater than” operator indicates that the specified value represents a minimum target value.
- ~
The “about” operator indicates that the specified value is a target value about which some fluctuation is acceptable.
A pset can only have one utilization objective set for each type
of operator.
If the ~ operator is set, then the < and > operators cannot be set.
If the < and > operators are set, then the ~ operator cannot be set. Note that the settings of the < operator and the > operator cannot contradict each other.
You can set both a < and a > operator together to create
a range. The values will be validated to make sure that they do
not overlap.
Configuration Objectives Example
In the following example, poold is to assess these objectives for the pset:
The utilization should be kept between 30 percent and 80 percent.
The locality should be maximized for the processor set.
The objectives should take the default importance of 1.
Example 12-1
poold Objectives Example
pset.poold.objectives "utilization > 30; utilization < 80; locality tight"
See How to Define Configuration Objectives for additional usage examples.
poold Properties
There are four categories of properties:
Configuration
Constraint
Objective
Objective Parameter
Table 12-1 Defined Property Names
Property Name |
Type |
Category |
Description |
system.poold.log-level |
string |
Configuration |
Logging level |
system.poold.log-location |
string |
Configuration |
Logging location |
system.poold.monitor-interval |
uint64 |
Configuration |
Monitoring sample interval |
system.poold.history-file |
string |
Configuration |
Decision history location |
pset.max |
uint64 |
Constraint |
Maximum number of CPUs for
this processor set |
pset.min |
uint64 |
Constraint |
Minimum number of CPUs for this processor set |
cpu.pinned |
bool |
Constraint |
CPUs pinned to
this processor set |
system.poold.objectives |
string |
Objective |
Formatted string following poold's objective expression syntax |
pset.poold.objectives |
string |
Objective |
Formatted string following poold's expression
syntax |
pool.importance |
int64 |
Objective parameter |
User-assigned importance |