工作负载管理器 中的资源限制规范

除了使用共享定义相关资源权限以外,WLM 还提供了指定类的资源限制的能力。 资源限制使管理员能更好地控制资源分配。 这些限制将被指定为百分比,并与类所在的层可用的资源数量相关。

对基于百分比的管理有三种类型的限制:
最小值
这是应该成为类可用的资源的最小数量。 如果实际类消耗低于该值,那么类将被给予对资源的最高优先级访问权。 可能的值为 0 到 100,0 为缺省值(如果未指定)。
最大软限制
这是在争用那种资源时类可以消耗的资源的最大数量。 如果类消耗超过该值,那么类将被给予其层中的最低优先级。 如果没有发生资源争用(从相同层中的其他类),那么将允许类消耗它要消耗的数量。 可能的值为 1 到 100,100 为缺省值(如果未指定)。
最大硬限制
这是类可以消耗的资源的最大数量(即使在没有发生争用时)。 如果类达到此限制,那么将不允许它进一步使用资源,直到它的使用量百分比降低到此限制以下为止。 可能的值为 1 到 100,100 为缺省值(如果未指定)。

在资源限制文件中按每类的节中的资源类型指定了资源限制值。 这些限制的范围被指定为最小至最大软限制,用忽略了空格的连字符(-)分隔。 指定时的硬最大值跟在软最大值之后,并用分号 (;) 分隔。 每个限制值后跟百分号 (%)。

以下是使用规则文件的示例:

  • 如果用户 joe 从组 acct3 执行 /bin/vi,那么进程将被放入超类 acctg 中。
  • 如果用户 sue 从组 dev 执行 /bin/emacs,那么进程将被放入超类 devlt 中(组标识匹配),但不会被分类到编辑器子类中,因为已将用户 sue 从那个类中排除。 进程将进入 devlt。 缺省值。
  • 当数据库管理员使用用户标识 oracle 和组标识 dbm启动 /usr/sbin/oracle 以提供数据库 DB1时,将在缺省超类中对该进程进行分类。 仅当进程的标记设置为 _DB1 时,才能将它分配给超类 db1。

limits 文件的节中,按类指定了所有资源类型的限制。 例如:

shares
classname:
   CPU     =   0%-50%;80%
   memory  =   10%-30%;50%

在此示例中,没有为磁盘 I/O 设置限制。 使用系统缺省值,这将转换为以下内容:

diskIO   =   0%-100%;100%

所有前面的示例都假设描述的超类和子类不具有设置为“是”的继承属性。 否则,新的进程将从他们的父代简单地继承超类或子类。

以下仅是 WLM 对资源限制值的约束:

  • 最小限制必须小于或等于最大软限制。
  • 最大软限制必须小于或等于最大硬限制。
  • 一个层中的所有超类的最小限制总和不能超过 100。
  • 一个层中的一个给定超类的所有子类的最小限制总和不能超过 100。

当带有内存硬限制的类已达到此限制并请求更多的页时,将启动 VMM 页面置换算法(LRU)并从受限制的类“挪用”页,从而在散发新的页之前将其页数降至硬最大限制以下。 此行为是正确的,但额外的页面调度活动(即使其中具有足够的可用页,此活动也可能发生)将影响系统的总体性能。 在对任何类强加内存最大硬限制之前,将建议对其他类使用内存最小限制。

因为在其最小限制以下的类在其层中具有最高优先级,所以最小限制的总和应根据相同层中的其他类的资源需求,保持合理的级别。

层中最小限制的总和约束小于或等于 100 意味着始终允许最高优先级层中的类最多获得等于其最小限制的资源。 WLM 不保证该类将在实际上达到其最小限制。 这取决于类中的进程如何使用它们的资源,以及其他有效的限制。 例如,类可能不会达到其最小 CPU 权限限制,因为它无法获得足够的内存。

对于物理内存,设置内存最小限制将对类的进程(至少对最高优先级层中的类的进程)的内存页提供某些保护。 当类低于其最小限制时,该类不应使其页被挪用,除非所有活动类都低于它们的最小限制并且其中一个类请求更多的页。 最高层中的类低于其最小限制时,它应从不使其页被挪用。 对交互式作业类设置内存最小限制可帮助确保它们的页在连续激活之间将不会被挪用(即使在内存紧张时)并减少响应时间。

注意: 如果未正确使用,那么使用硬最大限制可能会对系统或应用程序性能产生重大影响。 由于实施硬限制可能会导致系统资源不被使用,因此在大多数情况下,软上界更合适。 最大硬限制的用处之一可能是限制较高层的消耗以使某些资源对较低层可用,尽管最好的解决办法是将需要资源的应用程序放入较高层。

可以在限制文件中指定总限制,值和单位总结在下表中:

表 1. 工作负载管理器的资源限制
资源 允许的单位 缺省单位 最大值 最小值
totalCPU s、m、h、d 和 w s 230 – 1s 10 s
totalDiskIO KB、MB、TB、PB 和 EB KB (263 – 1) * 512/1024 KB 1 MB
totalConnectTime s、m、h、d 和 w s 263 – 1 s 5 m
totalProcesses 263 – 1 2
totalThreads 263 – 1 2
totalLogins 263 – 1 1
注: 单元说明符不区分大小写。 s = 秒, m = 分钟, h = 小时, d = 天, w = 周, KB = 千字节, MK = 兆字节, ... etc.
示例限制节如下:
BadUserClass:
     totalCPU = 1m
     totalConnectTime = 1h
可以通过遵循以下限制使用上表中的任何值指定总计限制:
  • 如果指定了 totalThread 的值,那么 totalThread 的值必须至少为 totalProcess 的值。
  • 如果指定了 totalThread 而没有指定 totalProcess,那么 totalProcess 的限制将被设置为 totalThread 的值。

可以在超类和子类级别指定总计限制。 在检查限制时,将在超类限制之前先检查子类限制。 如果指定了这两种限制,那么将实施这两者中的较低者。 如果指定的子类限制大于与其相关联的超类限制,那么在装入配置时将会发出警告,但该配置仍将被装入。 这对类总计限制是很重要的,因为该限制是绝对的(不是相对于超类的)并且一个子类可能会消耗超类可用的所有资源。 如果未指定,那么所有总计限制的缺省值将为“-”,该值意味着没有限制。 在缺省情况下,运行 WLM 时,将启用类和进程的总记帐和管理。 wlmcntrl 命令的 -T [class|proc] 选项可用于禁用总记帐和监管。