核心拥有某些 Solaris Resource Manager 参数,中央管理员可以在核心启动时对其进行设置。 Solaris 在启动时读取 /etc/system 文件,并用来配置核心模块(有关细节请参阅 system(4))。可以在 SHR 模块中设置的用于覆盖 Solaris Resource Manager 默认性能的参数(均为32位整数)有:
要在核心中进行高速缓存的 lnode 的数目。在 Solaris系统上,每个核心 lnode 需要大约3千字节。零值(默认值)意思是核心将确定其值。所采用的试探方法为:
(nproc / SRMProcsPerUid ) + SRMLnodesExtra |
其中,nproc 是系统中所允许的同时进程的最大数目。最小值6覆盖这一计算。 SRMMemoryMax 所指定的最大值也将覆盖这一计算。
所期待的每个用户所使用的进程的平均数目。默认值为4。
试探方法中所使用的一个边缘数,用于确定内存内 lnode 数组的大小。默认值为20。
散列表中的条目的数目,用于将 UID 值映射到核心中的 lnode。在 Solaris 上,每个条目为4字节长。默认值为零,意思是使用与 lnode数目一样的值。
该值的倒数是一个分数,指定用于 Solaris Resource Manager lnode和散列表两者的真实内存的最大百分比。默认值为20,意思是最大百分之5的真实内存将用于 Solaris Resource Manager 数据结构。
单一 lnode 的"内存超出"通知警告的最小间隔,以秒为单位。默认值为4。
例如,在 /etc/system 文件中,
set srmlim:SRMMemWarnFreq=10 |
行将确保内存针对任意单个用户的超出消息的发出频率不得超过每10秒钟一次。
另外还有一些 Solaris Resource Manager 中没有的参数,对 Solaris Resource Manager 的性能构成影响。这些参数包括:
这是 init(1M)进程启动时所在的调度类的名称。在 Solaris Resource Manager 下,所给出的参数应当是字符串 "SHR"(包含双引号字符)。默认的 Solaris值为 "TS"。如要将 Solaris Resource Manager 用于 CPU 资源控制,则 /etc/system 文件中应当包含下列一行:
set initclass="SHR" |
用于覆盖默认值:
这是一个要加载的调度类模块的名称,不必非要将其用作默认的调度类。如要只是将 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(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)的可选参数有两个,对管理员来讲也很有用。它们是:
-v 参数。用于在标准输出上打印所有当前参数设置的一个格式化报告。如果给出了两个或者三个 -v选项,则报告会越来越冗长。不带任何变元而调用srmadm(1MSRM)等同于给出单个的 -v选项。
-d 参数。对 Solaris Resource Manager 系统结构进行初始化时使用时默认值,而不是读出当前的核心设置。默认值主要提供对调度性能的控制,被内置于srmadm(1MSRM),对定制 Solaris Resource Manager 来讲是个很好的起点。核心开始时预置了同样的值。
下面是典型 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 |
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。