wlm.h 文件
用途
定义由 工作负载管理器 (WLM) 应用程序编程接口 (API) 子例程使用的常量,数据结构和函数原型。
描述
wlm.h 文件定义 wlm_args, wlm_assign, wlm_info, wlm_bio_class_info_t和 wlm_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_TOTALCONNECT 和 WLM_RES_TOTALCPU,缺省单位为 "s" (秒) ,而其他值为 "m" (分钟) , "h" (小时) , "d" (天) 和 "w" (周)。 对于 WLM_RES_TOTALDISKIO,缺省单位为 "KB" (千字节) ,其他值为 "MB" (兆字节) , "GB" (千兆字节) , "TB" (太字节) , "PB" (PB) , "EB" (EB) (EB)。 其他总计限制不具有单位。 对于 WLM_RES_TOTALVMEM 和 WLM_RES_PROCVMEM,将单位设置为 "MB" , "GB" 和 "TB"。
- 哈德马克斯
- 对于所有资源,但总限制。 指定硬最大限制,即 0 到 100 之间的值 (缺省值)。 该值必须大于或等于 最小 和 软最大值 字段中的每个值。 对于总限制,此参数指定它们的值,可能与 单位 字段一起使用。 如果用户未指定单位值,那么会使用缺省单位值。 但是,用户可以指定除缺省值以外的单位值。 缺省值 (未指定总计限制) 为 WLM_HARDMAX_UNDEF。
资源类型定义为 WLM_RES_CPU , WLM_RES_MEM, WLM_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_uid 和 assign_gid 字段都是缺省值,那么只有 root 用户才能将进程分配给类。
- 管理员用户ID
- 指定被允许管理超类的子类的用户的用户标识 (此属性仅对超类有效)
- 管理员组ID
- 指定被允许管理超类的子类的用户的组标识 (此属性仅对超类有效)
如果 admin_uid 和 admin_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 结构
| 项 | 描述 |
|---|---|
| i_descr | 指定类型为 struct class_descr 的类描述 |
| i_regul | 指定每个资源类型的结构数组,其类型为 结构 wlm_regul,其中包含以下字段:
各种资源的数组中的下标定义为 WLM_RES_CPU, WLM_RES_MEM 和 WLM_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 统计信息,具体取决于应用程序是需要按类统计信息还是需要按设备统计信息。
| 项 | 描述 |
|---|---|
| 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 统计信息:
|
| 白细胞计数延迟 | 指定对设备的类中进程的 I/O 施加的延迟 (以毫秒为单位)。 此延迟旨在限制类在使用超过其授权份额时的利用率。 |
| 项 | 描述 |
|---|---|
| wbd_dev | 指定设备标识 (dev_t) |
| wbd_活动_控制 | 指定主动访问设备的类的数目 |
| 队列中的wbd | 指定设备队列中的请求数目 |
| wbd_last | 指定在上一秒内发生的 IO 的设备统计信息。 此字段是整数值的数组。 wlm.h 文件中定义的以下符号值描述了数组中的每个索引:
|
| 最大工作负载 | 包含自首次对所描述的阵列的所有条目使用设备 (在 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_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 | 写入文件的尝试未成功 |