Solaris Resource Manager 1.3 系统管理指南

技术描述

每个 lnode 都有四个与 Solaris Resource Manager CPU 调度程序相关的属性:cpu.sharescpu.mysharescpu.usagecpu.accrueliminfo(1SRM) 的输出可显示这些属性及其它有用的数值。

Solaris Resource Manager 调度是采用 SHR 调度类实施的。这包括对 nice(1)、priocntl(1)、renice(1) 和 dispadmin(1M) 命令的支持。在系统调用级别上,SHR 就相当于 TS 调度类。

份额

用户的 cpu.shares 属性可用于根据用户的 parent 活动的同级分配 CPU 权利。只有当一个用户具有活动的 child 用户时,该用户的 cpu.myshares 属性才有意义;该属性用于确定针对用户的 CPU 权利的分配。

例如,如果用户 A 和 B 是父节点 P 的唯一的两个子用户,则 A、B 和 P 每个均拥有组 P 内的一个份额(即,A 和 B 的 cpu.shares 设置为 1,而 P 的 cpu.myshares 设置为 1),因而三方各自均拥有合组的权利合计之三分之一的 CPU 权利。

所以,某个用户的实际 CPU 权利取决于父节点的相对权利。这反过来又取决于该父节点的 cpu.shares 相对于该父节点的 peers 及祖父节点的 cpu.myshares 的相对数值,并依此类推沿调度树向上进行比较。

鉴于系统管理的原因,附加到 root lnode 上的进程不受份额属性的影响。附加到 root lnode 上的任何进程均被给予它请求的几乎所有 CPU 资源。

任何大量耗用 CPU 的进程均不得附加到 root lnode 上,这一点非常重要,因为这会严重影响其它进程的执行。为避免这种情况,应该采取以下预防措施:

并非调度树中的所有组长都需要代表运行进程的实际用户,在这些情况下,不必把 CPU 的一个份额分配给它们。这样的 lnode 可通过将其 cpu.myshares 属性设置为零而表示。在这样的一个组长中的 cpu.accrue 属性仍包括对其组的所有成员进行的更改。

已分配份额

cpu.sharescpu.myshares 属性用于确定每个活动 lnode 的当前 CPU 的已分配份额,形式是一个百分比。非活动用户的已分配份额对已分配份额没有任何区别。如果只有一个用户在活动,则该用户将拥有百分之 100 的可用 CPU 资源。如果只有同一组内份额相等的两个用户在活动,则每个用户将分得百分之 50 的份额。有关已分配份额的计算方法的详情,请参阅 已分配份额的计算

利用率和衰变

每当一个附加到 lnode 上的一个进程因使用 CPU 而被收费,cpu.usage 属性就会增加。利用率属性值以利用率衰变通用 Solaris Resource Manager 参数所确定的速率呈指数衰变。利用率衰变速率(以秒为单位用半衰期表示)由 srmadm(1MSRM) 命令设置。

尽管所有的进程都拥有一个 lnode,无论其当前的调度类如何,但从来不对 SHR 调度类之外的进程进行收费。

应计利用率

accrued 利用率属性以与利用率属性相同的数量增加,但并不衰变。所以,它就表示自属性最后一次预设后已经附加到该 lnode 及其成员上的所有进程的总累计利用率。

有效份额

lnode 的已分配份额及其 cpu.usage 属性可确定其当前的有效份额。Solaris Resource Manager 调度程序可调节附加到一个 lnode 上的所有进程的优先权,这样它们工作的速率就与该 lnode 的有效份额成正比,而与附加到其上的可运行进程的数目成反比。

每一进程份额优先权(sharepri

每个附加到某一 lnode 的进程,均拥有内部的针对 Solaris Resource Manager 的数据,由操作系统内核为其进行维护。对于调度来讲,这些值中最为重要的是 sharepri 值。在任何时候,sharepri 值最低的进程,将最有权得到调度,运行于某一 CPU。