在 Solaris 启动过程中,Solaris Resource Manager 软件的各项功能在不同点被启用。主要步骤介绍如下:
当内核启动时,各项参数从 /etc/system 文件装载。其中某些参数会影响 Solaris Resource Manager。这些参数在下面一节不带 Solaris Resource Manager 的启动中介绍。
在内核继续初始化的过程中,在创建了进程 0 之后和开始进程 1 之前,可通过开始 Solaris Resource Manager CPU 调度类 (SHR)(而非缺省调度类)中的 init 命令进行 Solaris Resource Manager 的初始化。SHR 模块被装载,进程 1(init进程)被 Solaris Resource Manager 软件调度。(请参阅 init(1M)。)
最初,init 进程及其所有子节点均附加到代理 root lnode 上。
在内核完全初始化后,系统将从单用户模式过渡到多用户模式之一(通常是运行级别 2 或者 3)。在本过程的早些时候,将运行 /etc/init.d/init.srm 脚本。此脚本执行的操作可见启动序列事件 的描述,这些操作可使 Solaris Resource Manager 正常运行。
如果您必须在 Solaris Resource Manager 不活动的条件下启动系统,则应修改 /etc/system 文件中的 initclass 参数,以反映时间共享 (TS) 而非 SHR。进行这一操作的一种简单方法就是使用 boot 命令的 -a (询问)选项,这样系统就会提示您使用系统文件。对于其它提示,可按下回车键接受缺省值,直到系统提示您输入系统文件名称为止。对于系统文件的名称的提示,可键入 etc/system.noshrload (开头无斜线)作为响应。下面介绍这一过程的例子:
请注意,/etc/system.noshrload 只是 /etc/system 的一个备份副本,是在安装 Solaris Resource Manager 时生成的。如果后来又对 /etc/system 进行过编辑,则 /etc/system.noshrload 应得到并行维护,从而使其不同之处只是 Solaris Resource Manager 所作的修改:
# diff /etc/system /etc/system.noshrload < # enable srm < set initclass='SHR' |
在换成多用户模式时发生的事件的序列对于 Solaris Resource Manager 特别重要。下列步骤序列可正确建立 Solaris Resource Manager 系统:
使用 srmadm 命令配置并启用 Solaris Resource Manager。
这时,限制数据库将被打开,SHR 调度程序将被启用。有关这个进程的详情,请参阅使用srmadm 启用 Solaris Resource Manager。
分配“丢失的”(srmlost) 和“空闲的”(srmidle) lnodes。
启动 Solaris Resource Manager 守护程序。
有关这个进程的详情,请参阅启动 Solaris Resource Manager 守护程序。
在适当 lnode 上启动其它的系统守护程序。
上述进程的步骤 1 到 3 中所使用的缺省脚本见于附件。
特别重要的是,应将守护程序(一般永久运行的系统维护进程)附加到除 root lnode 以外的 lnode 上。进程附加到 root lnode 要将对 CPU 要求较高的任何进程附加到 root lnode 上。将守护程序附加到其自己的 lnode 上可使中央系统管理员为它们分配适当的 CPU 份额。
在启动过程中,每个新的进程都从其父节点进程继承其 lnode 附加。因为 init 进程是附加到 root lnode 上的,所以,所有后续进程也是如此。直到 Solaris Resource Manager 初始化脚本开始运行且限制数据库已被打开,各进程都不能附加到其它 lnode 上;即使这只发生在某个进程进行公开的 setuid 系统调用(例如使用 login(1)) 或公开地询问 Solaris Resource Manager 附加到指定 lnode(如 srmuser(1SRM) 命令所进行的那样)。在 setuid 文件模式位已经设定的条件下运行一个程序也不会改变 lnode 附加。
所以,在系统启动过程中自动开始的所有系统程序都会被附加到 root lnode 上。这通常是我们不希望的,因为附加到已成为 CPU 耗用大户的 root lnode 上的任何进程都会严重地干扰其它进程的执行。所以,我们建议用户公开地把作为启动进程的一部分而开始的任何守护程序进程附加到它们自己的 lnode 上,方法是使用 srmuser 命令调用它们。这不会影响其真正的或有效的 UID。
这里显示的是一个可能的例子:
/usr/srm/bin/srmuser network in.named |
可用于替换其启动脚本中的 named( 1M) 守护程序。这要求事先建立网络的用户帐户和 lnode。
srmadm 命令使管理员可以控制 Solaris Resource Manager 的操作状态和系统内的配置。这个命令在从 Solaris Resource Manager init.d(4) 脚本 /etc/init.d/init.srm 向运行级别 2 或 3 转变时经常使用。运行这个命令的目的是确保在系统每次启动时都能为所有参数设定适当的数值,并确保 Solaris Resource Manager 系统可在用户访问系统之前被启用。 srmadm 命令还可用于对通用 Solaris Resource Manager 参数进行管理。有关可使用 srmadm 设定的参数的列表,请参阅 srmadm(1MSRM) 手册页。在 Solaris Resource Manager init.d 脚本中发布的 srmadm 命令可:
打开限制数据库。在达到这一点之前,已经启动的任何进程均自动附加到某个代理 root lnode 上。代理 root lnode 用于确保总有一个 lnode 可供进程连接(无论 Solaris Resource Manager 处于何种操作状态)。因此,限制数据库必须在任何非根进程启动前打开就变得非常重要。当限制数据库打开后,代理 root lnode 中的利用率属性的数值就被添加到其在真正 root lnode 中的对应数值中。这种技术的局限性在于,不能计数利用率的任何纯减少。这就确保了在限制数据库打开之前的利用率的改变不会被丢弃。
启动限制强化
设定能控制 Solaris Resource Manager SHR 调度程序的行为的参数,例如利用率衰减率。
启用 SHR 调度程序。在此之前,SHR 调度类中的进程已经采用简单的轮流方式完成调度, Solaris Resource Manager 系统中已经设定的 CPU 授权没有影响。
有关 借助 srmadm 的通用 Solaris Resource Manager 参数srmadm 命令的某些一般调用,请参阅。
limdaemon(1MSRM) 程序是 Solaris Resource Manager 用户模式守护程序。它通常是向运行级别 2 或 3 转变时作为 Solaris Resource Manager init.d 脚本的最后一步被调用的。它不应该与被内核调用的 srmgr 系统进程(SYS 类中)相混淆。以下 ps(1) 列表显示了这两种进程:
# ps -efc | egrep 'limdaemon|srmgr' root 4 0 SYS 60 18:42:14 ? 0:05 srmgr root 92 1 SHR 19 18:42:32 ? 0:41 limdaemon |
接收通知消息并将其提交给目的地用户的终端
接收登录和注销通知消息,对当前正在进行的所有 Solaris Resource Manager 登录会话期间保持一个精确的记录
周期性地为当前 Solaris Resource Manager 登录会话期间正在进行之中的所有用户更新连接时间利用率(可选)
检测出已经到达其连接时间限制的用户,终止其进程,在宽限时间间隔后使其退出(可选)
使用 syslog( 3C) 把所有活动登录到 syslogd( 1M)
当得知 Solaris Resource Manager 登录会话期间时,limdaemon 就监视所有用户的终端连接时间,并将此与其连接时间限制进行核对。当几乎达到其连接时间限制时,就向其发送一条通知消息。一旦达到到期时间,就给予一段宽限时间,然后就终止其所有的进程,并将其注销。
limdaemon 程序可使连接时间利用率衰减。如果使用连接时间限制,则必须对该种终端设备类别执行利用率衰减。有关 使用 limdaemonlimdaemon 命令行选项的信息,请参见。