适用于 Solaris 2.6 (SPARC 平台版) 的 Solaris Resource Manager 1.0 系统管理指南

核心启动参数

核心拥有某些 Solaris Resource Manager 参数,中央管理员可以在核心启动时对其进行设置。 Solaris 在启动时读取 /etc/system 文件,并用来配置核心模块(有关细节请参阅 system(4))。可以在 SHR 模块中设置的用于覆盖 Solaris Resource Manager 默认性能的参数(均为32位整数)有:

SRMLnodes

要在核心中进行高速缓存的 lnode 的数目。在 Solaris系统上,每个核心 lnode 需要大约3千字节。零值(默认值)意思是核心将确定其值。所采用的试探方法为:

(nproc / SRMProcsPerUid ) + SRMLnodesExtra 

其中,nproc 是系统中所允许的同时进程的最大数目。最小值6覆盖这一计算。 SRMMemoryMax 所指定的最大值也将覆盖这一计算。

SRMProcsPerUid

所期待的每个用户所使用的进程的平均数目。默认值为4。

SRMLnodesExtra

试探方法中所使用的一个边缘数,用于确定内存内 lnode 数组的大小。默认值为20。

SRMNhash

散列表中的条目的数目,用于将 UID 值映射到核心中的 lnode。在 Solaris 上,每个条目为4字节长。默认值为零,意思是使用与 lnode数目一样的值。

SRMMemoryMax

该值的倒数是一个分数,指定用于 Solaris Resource Manager lnode和散列表两者的真实内存的最大百分比。默认值为20,意思是最大百分之5的真实内存将用于 Solaris Resource Manager 数据结构。

SRMMemWarnFreq

单一 lnode 的"内存超出"通知警告的最小间隔,以秒为单位。默认值为4。

例如,在 /etc/system 文件中,

set srmlim:SRMMemWarnFreq=10 

行将确保内存针对任意单个用户的超出消息的发出频率不得超过每10秒钟一次。

另外还有一些 Solaris Resource Manager 中没有的参数,对 Solaris Resource Manager 的性能构成影响。这些参数包括:

initclass

这是 init(1M)进程启动时所在的调度类的名称。在 Solaris Resource Manager 下,所给出的参数应当是字符串 "SHR"(包含双引号字符)。默认的 Solaris值为 "TS"。如要将 Solaris Resource Manager 用于 CPU 资源控制,则 /etc/system 文件中应当包含下列一行:

set initclass="SHR"

用于覆盖默认值:

extraclass

这是一个要加载的调度类模块的名称,不必非要将其用作默认的调度类。如要只是将 Solaris Resource Manager 用于非 CPU 资源控制,则/etc/system文件中应当包含下列一行:

set extraclass="SHR"

如要启动系统时根本不加载任何 Solaris Resource Manager ,就使用一个替用的 /etc/system,其名称为 /etc/system.noshrload。请参阅 "启动时不带 Solaris Resource Manager "了解有关该进程的操作指示。

多用户启动配置

在正常的系统启动过程中,当系统从单用户模式变为多用户模式时,就运行一个 Solaris Resource Manager 初始化正文,对各种 Solaris Resource Manager 参数进行设置。该正文的动作细节,见于 第 4 章,启动过程

如果初始化正文自身(/etc/init.d/init.srm)被修改,则原来的和修改的版本的一个副本应当分开保存。应用 Solaris Resource Manager 更新程序,则不一定会保留当前的初始化正文。

借助 Srmadm 设置全局 Solaris Resource Manager 参数

srmadm(1MSRM)命令允许管理设置、修改或者显示全局 Solaris Resource Manager 参数。如要了解所有参数的完整细节,请参考手册页。

srmadm(1MSRM)命令用于设置各种参数,可以调用任意次数。不必将其全部包含在单一的调用上。这也意味着 srmadm(1MSRM)可以用来随时对一个正在运行的 Solaris Resource Manager 系统的操作参数进行更改,但需要注意一些事项。

对管理员来讲尤其重要的是 srmadm(1MSRM)选项,用来启用或者禁用 Solaris Resource Manager 的主要特性。其中有:

fileopen[={y|n}]

默认的数据库为 /var/srm/srmDB,可以用-f选项对其进行覆盖。注意,在操作中间关闭 Solaris Resource Manager 数据库文件应当视作一项紧急行动。这有多个不良后果:所有的进程将继续在替代根 lnode 上运行,从而获得比平常更多的特权;CPU 调度器遭到禁用; Solaris Resource Manager 限制强制执行终止。如果被启用, Solaris Resource Manager当前就没有打开任何的限制数据库,其高速缓存只包含所有进程所附加的替代根 lnode。

share[={y|n}]

如果被启用,就使用 Solaris Resource Manager CPU 调度器,且根据 Solaris Resource Manager 的动态使用和衰变算法进行 CPU 调度。除非 fileopen(文件打开)模式被启用,否则无法设置该模式。如果被禁用,就冻结 Solaris Resource Manager CPU 调度器的利用率算法,且进程被调度为"不分先后",拥有固定平等优先权。

limits[={y|n}]

如果被启用, Solaris Resource Manager 就强制执行虚拟内存和进程限制。除非 fileopen(文件打开)模式被启用,否则无法设置该模式。如果被禁用, Solaris Resource Manager 将使利用率属性保持为最新,但不强制执行限制。

adjgroups[={y|n}]

如果被启用,就使用 Solaris Resource Manager CPU 调度器的全局组有效份额调整。建议在大多数情形下使用启用状态。在每次运行的间隔,所有限制条目的正常化使用得到重新计算。如果 adjgroups 调度模式被启用,则对正常化使用进行如下的附加处理。调度器在调度树上进行逾越,将每个组最近所收到的有效份额与其权利进行比较。所收到的比其组权利少的组受到特别对待,将在下一个运行间隔收到较多的有效份额。这就确保组尽可能地收到其应得的 CPU 服务,而不论其成员有何操作。

limshare[={y|n}]

如果被启用, Solaris Resource Manager CPU 调度器就应用其特权高限特性,对所有用户的有效份额加以限制,以防止使用极端低下的用户短暂地获得 CPU 的百分之100。建议使用启用状态。

某个用户的 CPU 服务的比率,大体与该用户的利用率成反比。如果用户处于活动状态已有较长一段时间,则其利用率衰变到接近零。当这样的一个用户登录(或者无论如何 lnode 成为活动)时,则在下次运行间隔期间,该用户的进程可以拥有极高的优先权,乃至垄断 CPU。

启用 limshare 调度标志,会促使调度器对某一 lnode 在下个运行间隔之前对要收到的有效份额进行估算。如果结果超过某一因素所赋予用户的权利(参阅 maxushare),则对用户的正常化使用进行调整,以避免超过。

用于 srmadm(1MSRM)的可选参数有两个,对管理员来讲也很有用。它们是:

下面是典型 srmadm(1MSRM)命令的示例。

如要开启 Solaris Resource Manager ,启用 CPU 调度器和资源限制:

# srmadm set -f /var/srm/srmDB fileopen=y:share=y:limits=y 

如要将 CPU 利用率衰变速率设置为5分钟的半衰期:

# srmadm set usagedecay=300s 

如要显示当前的标志设置和收费:

% srmadm 

如要显示所有的默认设置:

% srmadm show -dv

禁用 Solaris Resource Manager

srmadm(1MSRM)命令可以清除 fileopen 标记,从而禁用 Solaris Resource Manager ;所有的进程均被移到替代根 lnode 上,高速缓存中其它改变了的 lnode 被写到磁盘,且关闭 lnode 文件。这自动强制关闭份额和限制标志,从而分别禁用 Solaris Resource Manager CPU 调度器和限制强制执行。可以根据需要单独关闭份额和限制标志,同时还让 lnode 文件保持为开。关闭文件最好使用这一方法,因为进程可以保持附加到其正确的 lnode。

注意:如果在操作中间单独关闭 Solaris Resource Manager 调度器,则结果只是暂停利用率和衰变算法。调度器仍旧继续处理 SHR 调度类中的进程,但是由于向其中每个指派了更新的优先权,使用的是同样的值,导致简单的"不分先后"调度。

在文件业已关闭后,通过打开文件并设置份额和/或限制标志来重新启用 Solaris Resource Manager ,并不会促使现有的进程从根 lnode 移开。不建议在正常操作过程中关闭 Solaris Resource Manager 数据库。如果这样做了,则应得重新启动系统,以便确保进程正确附加到 lnode。