用户的 cpu.shares 属性用于相对于用户的父节点和活动的同级用户,分配 CPU 权利。用户的 cpu.myshares 属性只在用户拥有活动的子用户时才有意义;用于相对于这些子用户,确定 CPU 权利的比例。
例如,如果用户 A 和 B 是父节点 P 的唯一的两个子用户,则A、B 和 P 每个均拥有组 P 内的一个份额(即,A 和 B 的 cpu.shares 设置为1,而 P 的 cpu.myshares设置为1),因而三方各自均拥有合组的权利合计之三分之一的 CPU 权利。
这样,某一用户的实际 CPU 权利取决于其父节点的相对权利。而后者又取决于父节点相对于父节点的同级用户以及相对于祖父节点的 cpu.myshares 的父节点的 cpu.shares 相对值,依此在调度树往上类推。
出于系统管理的原因,附加到根 lnode 的进程并不受制于份额属性。任何附加到根 lnode 的进程如果要求的话,总是被给予几乎全部的 CPU 资源。
没有将任何 CPU 密集型的进程附加到根 lnode 这一点很重要,否则其它进程的执行会收到严重影响。为了加以避免,应当注意下列事项:
中央管理员的帐户应当拥有自己的 UID,即与超级用户帐户不同的一个帐户。登录进行非管理性操作时,应当使用该帐户。如果需要超级用户的 UID 才能执行管理性功能,则中央管理员可以使用 su(1)命令,在保持附加到其自己的lnode 的同时更改 UID。
srmuser(1SRM)命令可以用于 init.d(4)正文,从而将任意的守护程序进程附加到非根 lnode。任何在启动正文中起动的进程都默认拥有一个有效的根UID,并且被附加到根 lnode。用户命令使得守护程序可以在附加到其自己的lnode 的同时,保留一个有效的根 UID。这就避免了在任何守护程序变为 CPU密集型时可能出现的问题。
并不是所有的调度树中的组头目都必须代表正在运行进程的实际用户,因而在这种情形下,就没有必要向它们分配 CPU 份额。可以通过将其 cpu.myshares 属性设置为零来指示此类 lnode。此类组头目中的 CPU 应计属性仍旧包含对其组内所有成员所征的收费。