wlm.h 文件

用途

定义由 工作负载管理器 (WLM) 应用程序编程接口 (API) 子例程使用的常量,数据结构和函数原型。

描述

wlm.h 文件定义 wlm_argswlm_assignwlm_infowlm_bio_class_info_twlm_bio_dev_info_t以及 wlm_proc_info 结构。 这些结构由 libwlm.a 库中的 WLM API 函数使用。

wlm_args 结构

当使用 API 函数来创建,修改或删除类时, wlm_args 结构用于将类信息传递至 WLM。 wlm_args 结构中包含以下字段:

弗尔斯标志
指定 4 个高阶位,这些位包含 API 用于维护二进制兼容性的版本号 (如果数据结构曾经修改过)。 整数的其余部分用于在需要时将标志传递到子例程。

应该使用版本号 WLM_VERSION 与目标子例程需要的任何标志之间的逻辑 操作来初始化该字段。 所有 API 调用的一个公共标志是 WLM_MUTE,该标志用于禁止将错误消息从 WLM 库输出到 STDERR

康迪尔
指定以 null 结束的字符串。 必须使用目标子例程所应用的 WLM 配置的名称来初始化此字段 (如果适用,具体取决于特定配置)。

或者,可以将此字段设置为空字符串 (\0)。 空字符串指示只将类添加或修改应用于 WLM 内核数据,而不应用于类描述文件。

class
此字段是类型为 struct class_definition 的结构,它包含与目标子例程所需要的超类或子类有关的所有信息。 可以通过调用 wlm_init_class_definition 子例程来初始化此结构中的字段,以便您只需要初始化您希望修改的字段。

wlm_init_class_definition 子例程中的主结构是类描述 struct class_descr,它具有以下字段:

恢复
指定类型为 struct wlm_bounds 的数组,其中包含每个资源类型和每个总限制的以下字段:
国际联谊会 /international opri-association
指定分类到类中的线程发出的 I/O 请求的优先级。 此优先级用于确定设备级别的 I/O 缓冲区的优先级。 有效 I/O 优先级范围从 0 到 15。
min
指定最小值,该值介于 0 (缺省值) 与 100 (未使用的总限制) 之间。
共享
指定共享号,它是 1 到 65535 之间的值。 该值 -1 (默认)表示给定资源不受该类别的WLM管理(不适用于总量限制)。
世界
包含 softmax (针对所有资源,但总限制) 和 unit (仅针对总限制) 字段的并集:
软最大值
指定软最大限制,即 0 到 100 之间的值 (缺省值)。 该值必须大于或者等于 最小 字段的值。
商品
这是一个字符串 (3 3 个字符) ,用于指定应用于总限制的硬最大值的单位。 要让单元保持未定义状态,请将 softmax 字段设置为 WLM_UNIT_UNDEF。 对于 WLM_RES_TOTALCONNECTWLM_RES_TOTALCPU,缺省单位为 "s" (秒) ,而其他值为 "m" (分钟) , "h" (小时) , "d" (天) 和 "w" (周)。 对于 WLM_RES_TOTALDISKIO,缺省单位为 "KB" (千字节) ,其他值为 "MB" (兆字节) , "GB" (千兆字节) , "TB" (太字节) , "PB" (PB) , "EB" (EB) (EB)。 其他总计限制不具有单位。 对于 WLM_RES_TOTALVMEMWLM_RES_PROCVMEM,将单位设置为 "MB" , "GB" 和 "TB"。
哈德马克斯
对于所有资源,但总限制。 指定硬最大限制,即 0 到 100 之间的值 (缺省值)。 该值必须大于或等于 最小软最大值 字段中的每个值。 对于总限制,此参数指定它们的值,可能与 单位 字段一起使用。 如果用户未指定单位值,那么会使用缺省单位值。 但是,用户可以指定除缺省值以外的单位值。 缺省值 (未指定总计限制) 为 WLM_HARDMAX_UNDEF

资源类型定义为 WLM_RES_CPU , WLM_RES_MEMWLM_RES_BIO,总限制定义为 WLM_RES_TOTALCPU (进程的总 CPU 时间) , WLM_RES_TOTALDISKIO (进程的总磁盘 IO 数) , WLM_RES_TOTALCONNECT (总连接时间) , WLM_RES_TOTALPROC (总进程数) , WLM_RES_TOTALTHRD (总线程数) , WLM_RES_TOTALLOGIN (总登录会话数) , WLM_RES_TOTALVMEM (类的总虚拟内存使用情况) 和 WLM_RES_PROCVMEM (进程的总虚拟内存使用情况)。 每个值都表示元素数组中的下标,对应于资源类型或总限制。

指定类的层号,它是 0 (缺省值) 到 9 之间的值
继承 (inheritance)
指定新进程的分类方式。 值 0 (缺省值) 指示在调用 执行 子例程时,应使用类分配规则对新进程进行分类。 值为 1 表示该进程从其父进程继承类分配。
localshm
指示当属于另一个类的进程访问此类中的内存段时,该类中的内存段是否保持本地 1 (值 1) ,或者它们是否转至共享类 (值 0 ,缺省值)。
分配用户标识符
指定被允许将进程手动分配给类的用户的用户标识。 该值必须是有效的用户标识。

如果未指定此属性,那么缺省值为未授权用户 (WLM_NOGUID)。

分配组ID
指定允许将进程手动分配给该类的用户的组标识。 该值必须是有效的组标识。 该值必须是有效的组标识。 未指定此属性时,缺省值为未授权任何组 (WLM_NOGUID)。

如果 assign_uidassign_gid 字段都是缺省值,那么只有 root 用户才能将进程分配给类。

管理员用户ID
指定被允许管理超类的子类的用户的用户标识 (此属性仅对超类有效)
管理员组ID
指定被允许管理超类的子类的用户的组标识 (此属性仅对超类有效)

如果 admin_uidadmin_gid 字段都保留为它们的缺省值 (WLM_NOGUID) ,那么只有 root 用户才能管理此超类的子类。

名称
指定类的以 null 结束的完整名称。 对于超类,该值的格式必须为 super_name ,对于子类,该值的格式必须为 super_name.sub_name 。 超类名称和子类名称各限制为 16 个字符。 此字段没有缺省值。

除了类描述字段之外, class_definition 结构还会添加两个字段:

Rset_name
指定一个以 null 结束的字符串,其中包含类被限制为的资源集 (分区) 的名称 (如果适用)。 缺省值是该类可以访问系统上的所有资源。
Descr_field
指定一个以 null 结束的字符串,其中包含类的描述文本。 此字段是可选的,并且没有缺省值。
delshm
指定如果由于虚拟内存限制而终止了引用该段的最后一个进程,那么是否删除共享内存段。 有效值为 "yes" 和 "no" (缺省值)。
弗门武夫
指定在达到虚拟内存限制时是终止故障进程 (值为 "proc" ,缺省值) 还是终止类中的所有进程 (值为 "class")。

wlm_assign 结构

wlm_assign 结构用于使用 wlm_assign 子例程手动将进程或进程组指定给指定的超类或子类。 wlm_assign 结构中包含以下字段:

描述
wa_versflags 指定 4 版本号的 4 个高阶位。 如果曾经修改过数据结构,那么 API 会使用此版本号来维护二进制兼容性。 整数的其余部分用于在需要时将标志传递到子例程。

应该使用版本号 WLM_VERSION来初始化此字段。 可以使用标志 WLM_MUTE 来禁止从 斯特德尔上的 WLM 库输出错误消息。

wa_pids 指定一个数组的地址,该数组包含要手动分配的进程的进程标识 (PID)
wa_pid_count 指定以上数组中 PID 的数量
wa_pgids 指定一个数组的地址,该数组包含要手动分配的进程组的进程组标识 (PGID)
wa_pgid_count 指定以上数组中的 PGID 数量
wa_类名 指定要将进程手动分配到的超类或类的子类的全名

wlm_info 结构

wlm_info 结构用于使用 wlm_get_info 子例程来抽取有关活动类的当前配置参数和当前资源利用率的信息。 wlm_info 结构中包含以下字段:
描述
i_descr 指定类型为 struct class_descr 的类描述
i_regul 指定每个资源类型的结构数组,其类型为 结构 wlm_regul,其中包含以下字段:
康苏姆
指定类的资源使用情况。 此值以可用资源总量的百分比表示。
total
指定 64 位数字,它表示自类创建以来 (或自 WLM 启动以来) 该类所消耗的资源总量。 该值可以是 CPU 的毫秒数,也可以是磁盘 I/O 的 512 字节块的总数。 对于内存,此字段保留为空 (不重要)。

各种资源的数组中的下标定义为 WLM_RES_CPUWLM_RES_MEMWLM_RES_BIO

i_class_id 指定类标识 (内核 class_control_block (ccb) 表中类的索引)
i_cl_pri 指定应用于类中的线程的优先级增量以进行 CPU 调整
i_cl_inuse 指定当前类中的进程数
i_cl_n登录 指定类中的当前登录数。
i_cl_nbthreads 指定该类中当前的线程数。
i_cl_npages 指定当前分配给类的内存页的数目
i_cl_nv页面 指定类的总虚拟内存使用情况。
i_cl_nvpagehi 指定虚拟内存使用率高水位标记。
i_cl_mem_最低水位线 指定这个类自创建以来的最大驻留内存页面数 (内存高水位标记)
i_cl_变更级别 指定每次在当前 WLM 配置中发生更改时的增量数。 WLM 监视工具将使用此字段。

wlm_bio_class_info_t 和 wlm_bio_dev_info_t 结构

可以使用两个结构来通过 wlm_get_bio_stats 子例程获取 I/O 统计信息,具体取决于应用程序是需要按类统计信息还是需要按设备统计信息。

wlm_bio_class_info_t 结构用于收集每个类和每个设备的 I/O 统计信息。 wlm_bio_class_info_t 结构中包含以下字段:
描述
wbc_dev 指定设备标识 (dev_t)
Wbc_cid 指定类标识 (在内核 class_control_block 表中的类的索引)。 可以通过使用 wlm_get_info 子例程来执行类标识和类名的连接。 此子例程在 wlm_info 结构中返回类名 (在 i_descr 字段中) 和类标识 (在 i_class_id 字段中)。
Wbc_regul 指定类型为 结构 wlm_regul的结构,它包含给定类和设备的以下磁盘 I/O 统计信息:
  • 资源利用率,表示为设备 (康苏姆) 的总可用吞吐量的百分比
  • 自创建以来或自 WLM 启动以来 (以最近发生的为准) ,类中的进程从设备读取/写入设备的 512 字节块的总数
白细胞计数延迟 指定对设备的类中进程的 I/O 施加的延迟 (以毫秒为单位)。 此延迟旨在限制类在使用超过其授权份额时的利用率。
wlm_bio_dev_info_t 结构用于收集给定设备的全局统计信息,并考虑访问该设备的所有类对该设备执行的所有 I/O 操作。 该结构包含以下字段:
描述
wbd_dev 指定设备标识 (dev_t)
wbd_活动_控制 指定主动访问设备的类的数目
队列中的wbd 指定设备队列中的请求数目
wbd_last 指定在上一秒内发生的 IO 的设备统计信息。

此字段是整数值的数组。 wlm.h 文件中定义的以下符号值描述了数组中的每个索引:

索引
描述
WBS_OUT_TRTHOUT
指定实际从设备读取的块数 (I/O 已完成)
WBS_OUT_WTHRPUT
指定实际写至设备的块数 (I/O 已完成)
WBS_IN_RTHORPUT
指定要从设备中读取的块的请求数目
WBS_IN_WTHRPUT
指定要写入到设备的请求块数
WBS_请求
指定读/写请求的数目
已排队的 WBS_QUEUED
指定排队的请求数
WBS_饥饿状态
指定已启动 (在时间间隔内未提供服务) 的请求数
最大工作负载 包含自首次对所描述的阵列的所有条目使用设备 (在 WLM 启动后) 以来所观察到的最大值。 例如, wbd_max 字段可能包含自设备首次访问以来,每秒从设备实际读取的最大块数。
温德阿夫 包含数组中所有条目的平均值,例如,设备队列中的平均请求数
wbd_总计 指定一个由 64 位整数组成的数组。 此数组与以下数组并行: 对于每个条目,这些数组包含自首次访问设备以来每秒测量的所有值的总和。 例如,该值可以表示自设备首次访问以来写入该设备的总块数。

wlm_proc_info 结构

wlm_proc_info 结构用于抽取 工作负载管理器 有关使用 wlm_get_procinfo 子例程的进程的信息。 仅当启用了总进程限制时, 总连接时间时间总 cputime托洛迪斯基奥 字段才有意义。 wlm_proc_info 结构中包含以下字段:

版本 (version)
此字段应该使用 WLM_VERSION进行初始化。
wlmflags
指定进程的某些 工作负载管理器 属性,例如具有 rset SWLMRSET 的进程,或者作为派生 SWLMTAGINHERITFORK 或 exec SWLMTAGINHERITEXEC上的标记继承。
totalConnectTime
指定表示登录会话已处于活动状态的时间量 (以秒为单位) 的 64 位数字。
总 vmem
指定进程使用的虚拟内存总量 (以 MB 为单位)。
时间
指定 64 位数字,该数字表示已请求终止进程的时间 (从 1970 年开始以秒计)。
总 cputime
指定用于表示进程的 CPU 耗用量 (以微秒为单位) 的 64 位数字。
totalDiskIO
指定用于表示进程已运行的 IO 量 (以 512 字节块为单位) 的 64 位数字。
类名
指定对进程进行分类的超类或子类的完整名称。
标记 (tag)
指定与进程关联的字符串 (如果有) (请参阅 wlm_set_tag 子例程)。

错误代码

各种 WLM API 子例程可能会返回下列其中一个或多个错误代码:
描述
WLM_ALREADYINIT wlm_initialize 子例程的调用已进行
WLM_ATTERR 属性格式错误
WLM_ATTGPATTR 属性中不允许属性值分组
WLM_ATTGPMISS 找不到属性值分组定义
WLM_ATTGPTOOLNG 属性值分组太长
WLM_BADATTAPP 无法访问文件 (属性的应用程序字段)
WLM_BADATTGP 属性值分组的格式不正确
WLM_不良数据组 属性中的未知组
WLM_BADATTTAG 属性中的标记无效
WLM_BADATTTYP 属性中的流程类型无效
WLM_BADATTUSR 属性中的未知用户
WLM_BADCLNAME 类名错误
WLM_BADCNAME 类名必须是字母数字
WLM_BADCONFIG 配置名称无效
WLM_BADDEFLIM 在 limits 文件中指定的缺省限制值无效
WLM_BADDEFSHR 在共享文件中指定的缺省共享值无效。
WLM_BADFLAGS 标志值无效
WLM_BADGID 指定的组标识在系统上无效。
WLM_BADGRP 指定的组标识在系统上无效。
WLM_BADINHER 指定给类继承属性的值无效
WLM_BADHARDTOTALLIMIT 总限制无效 (低于最小值)
WLM_BADHMAX 硬最大限制值必须介于 1 到 100 之间
WLM_BADLIMFMT 为最小或最大资源限制指定的值无效
WLM_BADLISTT 属性中的列表无效
WLM_BADLIST 任务分配规则的进程属性列表无效
WLM_BADLOCALSHM 本地 值不正确
WLM_BADMIN 最小资源限制值必须介于 0 到 100 之间
WLM_BADRANGEF 时间范围的格式无效
WLM_BADRGRP 规则 文件中指定的组名在系统上无效
WLM_BADRSET 类的 Rset 属性不正确
WLM_BADRUSR 在规则文件中指定的用户名在系统上无效
WLM_BAD共享 共享值必须在 1 1 65535 之间
WLM_BADSMAX 软最大限制值必须介于 1 到 100 之间
描述
WLM_BADSHRFMT 为资源份额指定的值无效
WLM_BADSUBLIMIT 子类总计限制超过了其超类限制: 将使用超类限制 (警告)
WLM_BADSUPER 子类分配的超类不正确
WLM_BADI_ 层值必须介于 0 到 9 之间
WLM_BADTAG 在规则中指定了无效标记
WLM_BADTYP 规则中的流程类型无效
WLM_BADUID 指定的用户标识在系统上无效。
WLM_BADUSR 指定的用户标识在系统上无效。
WLM_BADVERS 弗尔斯标志 字段中传递了错误的版本号
WLM_无法分配 无法进行分配 (内部错误)
WLM_无法检查 无法检查该配置
WLM_CANTSETTAG 无法设置标记 (内部错误)
WLM_CHOWNERR 无法更改文件所有权
WLM_CLASSLIMIT 已达到类总数 (进程数,线程数或登录数) 限制
WLM_CLASSMIS 找不到类描述
WLM_会议未找到 此时未找到任何配置
WLM_会议未插入 在集合中找不到配置
WLM_CREATERR 未能创建文件。
WLM_守护进程命令 WLM 守护程序命令无效
WLM_守护进程故障 WLM 守护程序未能更新配置
WLM_DUPKEY 2 个类具有相同的键 (警告)
WLM_EFAULT 参数地址错误
WLM_EMPTYATTR 找不到有效的进程属性
WLM_空规则 无法访问在分配规则的应用程序字段中指定的任何文件名。 该规则被忽略 (警告)。
WLM_EPERM 拒绝许可权
WLM_ESRCH 无此类流程
WLM_EXCLATTR 属性中不允许排除
WLM_EXISTS 指定的类已存在
WLM_HASSUBS 目标超类具有子类
WLM_忽略规则 此规则很可能被忽略 (警告)
WLM_ISCONFSET 此操作无法应用到配置集
WLM_INVRANGE 时间范围无效
WLM_ISLOCKED WLM 配置已锁定: 稍后重试该操作
WLM_加载器 无法将类装入到内核中
描述
WLM_LOCKERR 无法锁定文件
WLM_MANYRULES 分配规则过多
WLM_MANYITEMS 分配规则中的项过多
WLM_MAXCLASSES 已达到类的最大数量
WLM_最小值最大值 最小限制不能大于软的最大限制
WLM_创建目录错误 未能创建目录。
WLM_MULTATTGP 属性值分组已定义
WLM_MULTATTR 属性中不允许多个规范
WLM_无管理子订阅 管理属性不适用于子类
WLM_无类 指定的类不存在
WLM_无配置 缺少配置名称
WLM_NOCONFINSET 集合中没有配置
WLM_NOCONNECT 未能连接到 WLM 守护程序
WLM_NODaemon 无法启动 WLM 守护程序
WLM_NOMEM 内存不足
WLM_无限制 无法为共享类指定总内存限制
WLM_NOSRRULE 无法为共享类指定规则
WLM_无字幕 目标超类没有任何子类
WLM_无系统文件 无法为系统类指定总内存限制
WLM_系统最大值 系统类的内存上不允许硬最大值
WLM_NOTSSGND 未分配进程
WLM_未完成 无法分配所有进程 (警告)
WLM_非当前 超类更新仅适用于当前配置
WLM_未集成 没有对 wlm_initialize 子例程的先前调用
WLM_未运行 WLM 未在运行
WLM_NOWILDCRD 此字段中不允许使用通配符
WLM_ONEDEFAULT 在一个集合中只允许一个缺省时间范围
WLM_OPENERR 无法打开某个文件
WLM_查询错误 无法查询 WLM 状态
WLM_READERR 无法读取文件
WLM_REFRULE 一个类仍由规则引用
WLM_REMERR 移除文件的尝试未成功
WLM_重命名错误 重命名文件的尝试未成功
WLM_RMPREDEF 无法除去预定义类 (例如,缺省类和系统类)
WLM_RNOCLASS 在规则文件中指定的类不存在
描述
WLM_RSVDNAME 无法重新定义预定义类
WLM_RULERR 分配规则具有无效的格式
WLM_规则错误 无法将分配规则表装入到内核中
WLM_规则工具NG 规则过长
WLM_RUNERR WLM 库无法执行特定功能所需要的命令。 这不是一个应用程序错误,但很可能是系统管理问题。 该库所使用的命令是基本操作系统命令,例如 勒苏泽lsgroup回声格雷普 命令。
WLM_运行错误 无法展开属性
WLM_SETERR 请求的 WLM 状态转换非法
WLM_共享限制 共享类可以仅为内存设置共享和限制
WLM_共享子项 共享超类不能具有子类
WLM_SMAXHMAX 软最大限制不得大于硬最大限制
WLM_STATERR 无法访问分配规则的应用程序字段中指定的一个或多个文件名称。 相应的名称被忽略 (警告)
WLM_SUBINVALID 此操作不允许任何子类规范
WLM_SUMMINS 给定资源与给定层的最小限制不能超过 100% 的总和
WLM_SYMLERR 创建符号链接的尝试未成功
WLM_TAGTOOLONG 标记时间过长
WLM_TOOLONG 指定的类名过长
WLM_TOOLONGATT 属性列表过长
WLM_TOOMANYATT 属性中的项过多
WLM_TOOMANYPID 进程标识列表太长
WLM_TOOSMALL 输出缓冲区太小
WLM_TOTALLIMITTOFRANGE 总限制无效 (超出允许范围)
WLM_TRGAPES 配置集中时间范围之间的间隔
WLM_TRINDEFAULT 缺省节中不允许时间范围
WLM_TROVERLAP 配置集中的时间范围重叠
WLM_卸载器错误 无法卸载类
WLM_不支持 不支持操作或标志值
WLM_WILDCRDATT 此属性字段中不允许使用通配符
WLM_WRITERR 写入文件的尝试未成功