rs_setpartition 子例程
用途
设置一个进程的分区资源集。
库
标准 C 库 (libc.a)
语法
#include <sys/rset.h>
int rs_setpartition(pid, rset, flags)
pid_t pid;
rsethandle_t rset;
unsigned int flags;描述
rs_setpartition子程序用于设置进程的分区资源集。 该子例程也可以用来除去进程的分区资源集。
分区资源集将进程中的线程限制为仅在该分区资源集中包含的处理器上运行。
工作组件是由流程 ID 标识的现有流程。 进程 ID 值为 RS_MYSELF 表示附件适用于当前进程。
必须满足以下条件才能设置进程 "分区资源集":
- 调用过程必须具有 root 用户权限。
- 该资源集必须包含在系统中可用的处理器。
- 新分区资源集必须等于或等于目标进程的有效资源集的超集。
- 目标进程不得包含任何具有与处理器绑定的 bindprocessor 绑定的线程。
- 资源集必须是目标进程中所有线程rset的超集。
可以设置flags参数,以指示使用rset参数中指定的资源集中所含资源的策略。 唯一支持的调度策略是 R_ATTACH_STRSET,它只有在系统处理器以 "同步多线程模式运行时才有用。 POWER5等处理器支持同步多线程,每个物理处理器有两个执行引擎,称为硬件线程。 每个硬件线程基本上等同于一个处理器,每个线程在资源集中被识别为一个独立的处理器。 R_ATTACH_STRSET 标志指示该进程将使用单线程策略进行调度; 即,应该仅在每个物理处理器的一个硬件线程上调度该进程。 如果指定了 R_ATTACH_STRSET 标志,那么资源集中显示的所有可用处理器都必须是独占使用的(处理器必须属于某个独占使用的处理器资源集)。 一个新的资源集(称为ST 资源集)由指定的资源集构建而成,并根据以下规则附加到流程中:
- 将忽略所有脱机处理器。
- 如果物理处理器的所有硬件线程 (处理器) (以 同时多线程 方式运行时,每个物理处理器将有多个活动硬件线程) 未包括在指定的资源集中,那么在构造 ST 资源集时,将忽略该处理器的其他处理器。
- 每个物理处理器只有一个处理器 (硬件线程) 资源包含在 ST 资源集中。
参数
| 项 | 描述 |
|---|---|
| pid | 指定要设置其分区资源集的过程的进程标识。 值RS_我自己表示应该设置当前进程的分区资源集。 |
| rset | 指定要设置的分区资源集。 值 RS_DEFAULT 指示应该移除进程的分区资源集。 |
| 标志 | 指定要用于该进程的策略。 如果值为 R_ATTACH_STRSET ,那么表示将使用单线程策略 (每个物理处理器仅在一个硬件线程上) 调度该进程。 |
返回值
如果成功,那么将返回值 0。 如果不成功,则返回值为-1,并设置errno全局变量来指示错误。
错误代码
如果以下一个或多个条件为真,rs_setpartition子例程将失败:
| 项 | 描述 |
|---|---|
| EINVAL | 指定了 R_ATTACH_STRSET标志参数,而rset参数中的一个或多个处理器未被分配专用。 |
| ENODEV | 由 雷塞 参数指定的资源集不包含任何可用的处理器,或者指定了 R_ATTACH_STRSET 标志 参数,并且构造的 ST 资源集没有任何可用的处理器。 |
| ESRCH | pid参数标识的进程不存在。 |
| EFAULT | 地址无效。 |
| ENOMEM | 内存不可用。 |
| EPERM | 发生了下列其中一个错误:
|