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

添加计算批处理应用程序用户

本示例介绍的是下列命令:

srmkill

用于中止附加到某一 lnode 的所有活动进程

财务部门拥有数据库系统,但来自工程部门的一个用户(Joe)必须运行一个计算任务,想在系统通常空闲的非高峰时间使用财务部门的机器。财务部门断定 Joe 的任务没有数据库重要,同意只在其不干扰系统的主要工作的条件下才可以运行他的工作。如要强制执行该策略,需将一个新的组(batch)添加到 lnode database,并将 Joe 添加到服务器 lnode 分层结构中的新的 batch 组。

 % limadm set cpu.shares=20 databases % limadm set cpu.shares=1 batch % limadm set cpu.shares=1 joe % limadm set sgroup=batch joe

图形 2-2 添加计算批处理应用程序

Graphic

该命令序列改变份额分配,以使 databases 组拥有20个份额,而使 batch组只拥有一个。这就指定 batch 组的成员(只有Joe),在 databases 组活动时最多只能使用机器的1/21。而 databases 组收到20/21或者说百分之95.2,多于以前确定为足够用来处理数据库工作的60% + 20% = 80%。如果 databases 没有要求得到其全部分配,则 Joe 所收到的将多于分配给他的百分之4.8。如果 databases 完全不活动,则 Joe 的分配可能会达到百分之100。但分配给 databases 的未决份额的数目从1增加到20时,就没有必要对 db1 db2 的份额分配进行任何更改。在 databases 组内部,仍然有四个未决份额,其分配比率为3:1。调度树的不同层次之间是完全独立的;关键是同级组之间的份额比率。

即使有了这些把握,财务部门仍旧想确保 Joe 无法在白天高峰时间登录。这在 batch 组上放置一些控制就可以办到。鉴于控制对一天内的时间敏感,实现起来可以是在一天开始和结束时运行一个正文,从而改变 batch组所允许的登录数目。例如,可以借助 crontab 条目加以实现,诸如:

0 6 * * * /usr/srm/bin/limadm set logins=0 batch
0 18 * * */usr/srm/bin/limadm set logins=100 batch

在早晨6点钟,batch 的登录限制减少为0,而在18点钟(下午6点钟),限制上升为允许多达100个登录。

还可以实现一个更为严格的策略,方法是将另一行添加到 crontab 条目:

01 6 * * * /usr/srm/bin/srmkill joe

这使用的是 srmkill 命令,用于在早晨6点零1分时中止任何附加到 lnode Joe 的进程,如果该任务所需的唯一资源正是 Solaris Resource Manager 所控制的资源的话,就没有这个必要。如果有理由认为 Joe 的任务可能会独占其它资源从而对正常工作造成干扰的话,就可以使用上述操作。例如某个任务使某个关键性的数据库锁定或者独占某个 I/O 通道。

现在 Joe 只能在夜间登录运行其任务了。由于 Joe(以及整个 batch 组)所拥有的份额比其它应用程序少得多,他的应用程序运行时只能使用百分之5的机器。同理,nice(1)可以用来降低附加在该任务上的进程的优先级,从而使其运行时所拥有的优先级低于正在运行的其它拥有同等 Solaris Resource Manager 份额的任务。

现在,财务部门就确信其数据库应用程序可以对其系统进行足够的访问,且其工作不会互相干扰了。他们在提供 Joe 连夜批处理负载的同时,还确保他的工作不会干扰其关键任务的处理。