更改配置时,poold 会针对您提供的指示执行操作。可以将这些指示指定为一系列约束和目标。poold 根据您指定的内容,来确定其他可能配置相对于现有配置的相对值。然后,poold 更改当前配置的资源分配,以生成新的候选配置。
约束通过排除某些可能会对配置进行的潜在更改来影响可能配置的范围。在 libpool 配置中指定的以下约束均可用。
最小和最大 CPU 分配量
无法从集中移动的固定组件
有关池属性的更多信息,请参见 libpool(3LIB) 手册页和池属性。
这两个属性用于限制可以为处理器集分配的最小和最大处理器数。有关这些属性的更多详细信息,请参见表 12–1。
在遵守这些约束的情况下,可以将资源分区的资源分配给同一 Solaris 实例中的其他资源分区。通过将资源绑定到与资源集关联的池,可获取对此资源的访问权限。绑定可以在登录时执行,也可以由拥有 PRIV_SYS_RES_CONFIG 权限的管理员手动执行。
cpu-pinned 属性指明,DRP 不应从特定 CPU 所在的处理器集中移动该 CPU。您可以设置此 libpool 属性,以最大化在处理器集中执行的特定应用程序的高速缓存利用率。
有关此属性的更多详细信息,请参见表 12–1。
pool.importance 属性描述了池的相对重要性,该重要性由管理员定义。
目标的指定方式与约束类似。表 12–1 中记录了完整的一组目标。
有两种类别的目标。
与工作负荷有关的目标是指将随系统上运行的工作负荷的性质而变化的目标。utilization 目标便是一个示例。资源集的使用率数字将随此集中的活动工作负荷的性质而变化。
与工作负荷无关的目标是指不会随系统上运行的工作负荷的性质而变化的目标。CPU locality 目标便是一个示例。资源集邻近性的评估标准不随此集中的活动工作负荷的性质而变化。
您可以定义三种类型的目标。
名称 |
有效元素 |
运算符 |
值 |
---|---|---|---|
wt-load |
system |
N/A |
N/A |
locality |
pset |
N/A |
loose | tight | none |
utilization |
pset |
< > ~ |
0–100% |
目标存储在 libpool 配置内的属性字符串中。这些属性名如下所示:
system.poold.objectives
pset.poold.objectives
目标的语法如下:
objectives = objective [; objective]*
objective = [n:] keyword [op] [value]
所有目标都有可选的重要性前缀。重要性用作目标的乘数,因此可增加它对目标函数评估的影响程度。范围从 0 到 INT64_MAX (9223372036854775807)。如果未指定,则缺省的重要性值为 1。
某些元素类型支持多种目标类型。pset 便是一个示例。您可以为这些元素指定多种目标类型,还可以针对单个 pset 元素指定多个使用率目标。
有关使用情况的示例,请参见如何定义配置目标。
wt-load 目标优先考虑资源分配与资源使用率匹配的配置。当此目标处于活动状态时,将为使用多个资源的资源集提供更多资源。wt-load 表示加权负载。
使用此目标的前提是:满足使用最小和最大值属性建立的约束,并希望守护进程在遵守这些约束的情况下自由处理资源。
locality 目标会影响由地址组 (lgroup) 数据度量的邻近性对选定配置的影响。邻近性的另一个定义是延迟。lgroup 描述了 CPU 资源和内存资源。Solaris 系统使用 lgroup 以时间为度量值来确定资源之间的距离。有关地址组摘要的更多信息,请参见《编程接口指南》中的“地址组概述”。
此目标可采用以下三个值之一:
如果设置,则优先考虑最大化资源邻近性的配置。
如果设置,则优先考虑最小化资源邻近性的配置。
如果设置,则优先考虑配置时不受资源邻近性的影响。这是 locality 目标的缺省值。
通常,locality 目标应设置为 tight。但是,为了最大化内存带宽或最小化 DR 操作对资源集的影响,可以将此目标设置为 loose,也可以使其保留缺省设置 none。
utilization 目标优先考虑将资源分配给未满足指定使用率目标的分区的配置。
此目标使用运算符和值来指定。运算符如下:
“小于”运算符表明指定的值为最大目标值。
“大于”运算符表明指定的值为最小目标值。
“约等于”运算符表明指定的值是可在一定程度上上下浮动的目标值。
对于每种运算符类型,pset 只能设置一个 utilization 目标。
如果设置了 ~ 运算符,则不能设置 < 和 > 运算符。
如果设置了 < 和 > 运算符,则不能设置 ~ 运算符。请注意,< 运算符和 > 运算符的设置不能互相冲突。
您可以同时设置 < 和 > 运算符来创建一个范围。要验证值以确保它们不重叠。
在以下示例中,poold 将为 pset 评估这些目标:
utilization 应保持在 30% 到 80% 之间。
应将处理器集的 locality 最大化。
目标应采用缺省重要性 1。
pset.poold.objectives "utilization > 30; utilization < 80; locality tight"
有关其他使用情况的示例,请参见如何定义配置目标。
有四种类别的属性:
配置
约束
目标
目标参数
属性名 |
类型 |
类别 |
说明 |
---|---|---|---|
system.poold.log-level |
字符串 |
配置 |
日志级别 |
system.poold.log-location |
字符串 |
配置 |
日志位置 |
system.poold.monitor-interval |
uint64 |
配置 |
监视抽样间隔 |
system.poold.history-file |
字符串 |
配置 |
决策历史记录的位置 |
pset.max |
uint64 |
约束 |
此处理器集的最大 CPU 数 |
pset.min |
uint64 |
约束 |
此处理器集的最小 CPU 数 |
cpu.pinned |
布尔型 |
约束 |
固定到此处理器集的 CPU |
system.poold.objectives |
字符串 |
目标 |
遵循 poold 的目标表达式语法的格式化字符串 |
pset.poold.objectives |
字符串 |
目标 |
遵循 poold 的表达式语法的格式化字符串 |
pool.importance |
int64 |
目标参数 |
用户指定的重要性 |