kra_attachrset 子例程
用途
将工作组件连接到资源集。
语法
#include <sys/rset.h>
int kra_attachrset (rstype, rsid, rset, flags)
rstype_t rstype;
rsid_t rsid;
rsethandle_t rset;
unsigned int flags;描述
kra_attachrset 子例程将由 雷斯特佩 和 Rsid 参数指定的工作组件连接到由 雷塞 参数指定的资源集。
工作组件是由进程标识所标识的现有进程或由内核线程标识 (tid) 所标识的现有内核线程。 进程标识或线程标识值RS_自己指示连接分别应用于当前进程或当前内核线程。
要成功将进程连接到资源集,必须满足以下条件:
- 该资源集必须包含在系统中可用的处理器。
- 调用进程必须具有 root 用户权限或具有 CAP_NUMA_ATTACH 能力。
- 调用进程必须具有 root 用户权限或者与目标进程具有相同的有效用户标识。
- 目标进程不得包含任何具有与处理器绑定的 bindprocessor 绑定的线程。
- 资源集必须包含在 (是以下项的子集) 中 目标进程的分区资源集。
- 此资源集必须是目标进程中所有线程的 雷塞 的超集。
要将内核线程成功连接到资源集,必须满足以下条件:
- 该资源集必须包含在系统中可用的处理器。
- 调用进程必须具有 root 用户权限或具有 CAP_NUMA_ATTACH 能力。
- 调用进程必须具有 root 用户权限或者与目标进程具有相同的有效用户标识。
- 目标线程不能具有与处理器的 bindprocessor 绑定。
- 资源集必须包含在 (是以下项的子集) 中 目标线程的进程有效和分区资源集。
如果不满足这些条件中的任何条件,那么附件将失败。
将进程连接到资源集后,该进程中的线程将仅在该资源集中包含的处理器上运行。 一旦将内核线程连接到资源集,该线程将仅在该资源集中包含的处理器上运行。
可以设置 标志 参数以指示用于使用 雷塞 参数中指定的资源集中包含的资源的策略。 唯一受支持的调度策略是 R_ATTACH_STRSET ,仅当系统的处理器以 同时多线程 方式运行时,此策略才有用。 POWER5 支持 同时多线程之类的处理器,其中每个物理处理器都有两个执行引擎,称为 硬件线程。 每个硬件线程基本上相当于一个 CPU ,并且每个线程都被标识为资源集中的一个单独 CPU。 R_ATTACH_STRSET 标志指示该进程将使用单线程策略进行调度; 即,应该仅在每个物理处理器的一个硬件线程上调度该进程。 如果指定了此标志,那么资源集中指示的所有可用处理器都必须是独占使用的。 新资源集 (称为 ST 资源集) 是根据指定的资源集构造的,并根据以下规则连接到流程:
- 将忽略所有脱机处理器。
- 如果物理处理器的所有硬件线程 (CPU) (在 同时多线程 方式下运行时,每个物理处理器将有多个活动硬件线程) 未包含在指定的资源集中,那么在构造 ST 资源集时将忽略该处理器的其他 CPU。
- 在 ST 资源集中,每个物理处理器仅包含一个 CPU (硬件线程) 资源。
参数
| 项 | 描述 |
|---|---|
| 雷斯特佩 | 指定要附加到由 雷塞 参数指定的资源集的工作组件类型。 rstype 参数必须是 rset.h中定义的以下值:
|
| Rsid | 标识要连接到由 雷塞 参数指定的资源集的工作组件。 Rsid 参数必须为以下内容:
|
| rset | 指定要将哪个工作组件 (由 雷斯特佩 和 Rsid 参数指定) 连接到资源集。 |
| 标志 | 指定正在连接的工作组件的调度策略。 唯一受支持的值为 R_ATTACH_STRSET 值,仅当 雷斯特佩 参数设置为 R_PROCESS 时才适用。 R_ATTACH_STRSET 值指示将使用单线程策略 (每个物理处理器仅在一个硬件线程上) 来调度该进程。 |
返回值
成功完成后, kra_attachrset 子例程将返回 0。 如果不成功,那么以下一项或多项为 true:
| 项 | 描述 |
|---|---|
| EINVAL | 发生了下列其中一个错误:
|
| ENODEV | 由 雷塞 参数指定的资源集不包含任何可用的处理器,或者指定了 R_ATTACH_STRSET 标志 参数,并且构造的 ST 资源集没有任何可用的处理器。 |
| ESRCH | 由 雷斯特佩 和 Rsid 参数所标识的进程或内核线程不存在。 |
| EPERM | 发生了下列其中一个错误:
|