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中定义的以下值:
  • R_PROCESS: 现有进程
  • R_THREAD: 现有内核线程
Rsid 标识要连接到由 雷塞 参数指定的资源集的工作组件。 Rsid 参数必须为以下内容:
  • 进程标识 (对于 R_PROCESS 的 雷斯特佩 ): 将 rsid_t at_pid 字段设置为所需进程的进程标识。
  • 内核线程标识 (对于 R_THREAD 的 雷斯特佩 ): 将 rsid_t at_tid 字段设置为期望的内核线程的线程标识。
rset 指定要将哪个工作组件 (由 雷斯特佩Rsid 参数指定) 连接到资源集。
标志

指定正在连接的工作组件的调度策略。

唯一受支持的值为 R_ATTACH_STRSET 值,仅当 雷斯特佩 参数设置为 R_PROCESS 时才适用。 R_ATTACH_STRSET 值指示将使用单线程策略 (每个物理处理器仅在一个硬件线程上) 来调度该进程。

返回值

成功完成后, kra_attachrset 子例程将返回 0。 如果不成功,那么以下一项或多项为 true:

描述
EINVAL 发生了下列其中一个错误:
  • 标志 参数包含无效的值。
  • 雷斯特佩 参数包含无效类型限定符。
  • 指定了 R_ATTACH_STRSET 标志 参数,并且未将 雷塞 参数中的一个或多个处理器指定为互斥使用。
ENODEV 雷塞 参数指定的资源集不包含任何可用的处理器,或者指定了 R_ATTACH_STRSET 标志 参数,并且构造的 ST 资源集没有任何可用的处理器。
ESRCH 雷斯特佩Rsid 参数所标识的进程或内核线程不存在。
EPERM 发生了下列其中一个错误:
  • 如果 雷斯特佩 为 R_PROCESS ,那么由 雷塞 参数指定的资源集将不包含在由 雷斯特佩Rsid 参数标识的进程的分区资源集中,或者此进程中的任何线程的 R_THREAD 雷塞 都不是由 雷塞 参数指定的资源集的子集。
  • 如果 雷斯特佩 为 R_THREAD ,那么由 雷塞 参数指定的资源集不会包含在目标线程的进程有效或分区 (实际) 资源集内。
  • 调用进程既没有 root 用户权限,也没有 CAP_NUMA_ATTACH 连接特权。
  • 调用进程既没有 root 用户权限,也没有与 雷斯特佩Rsid 参数所标识的进程相同的有效用户标识。
  • 雷斯特佩Rsid 参数标识的进程或线程具有一个或多个具有 bindprocessor 处理器绑定的线程。