语法
#include <sys/rset.h>
int ra_attach(rstype1, rsid1, rstype2, rsid2, flags)
rstype_t rstype1, rstype2;
rsid_t rsid1, rsid2;
unsigned int flags;
描述
ra_attach 子例程将由 rstype1 和 rsid1 参数指定的工作组件连接到由 rstype2 和 rsid2 参数指定的资源。
参数
| 项 |
描述 |
| rstype1 |
指定要连接到 rstype2/rsid2指定的资源的工作组件的类型。 rstype1 参数必须是 rset.h中定义的下列其中一个参数。
- R_PROCESS
- 现有流程
- R_THREAD
- 现有内核线程
- R_FILDES
- 由打开的文件描述符标识的文件
- R_SHM
- 由共享内存标识标识的共享内存段
- R_SUBRANGE
- 连接到工作组件中的内存范围
|
| rsid1 |
指定与 rstype1 参数关联的工作组件。 rsid1 参数必须为以下某个值:
- 进程标识 (对于 R_PROCESS 的 rstype1 )
- 将 rsid_t at_pid 字段设置为期望的进程标识。
- 内核线程标识 (对于 R_THREAD 的 rstype1 )
- 将 rsid_t.at_tid 字段设置为期望的内核线程标识。
- 打开文件描述符 (对于 R_FILDES 的 rstype1 )
- 将 rsid_t at_fd 字段设置为期望的文件描述符。
- 共享内存段 (对于 R_SHM 的 rstype)
- 将 rsid_t at_shmid 字段设置为所需的共享内存标识。
- 指向 subrange_t 结构的指针 (对于 R_SUBRANGE 的 rstrype)
- 将 rsid_t at_subbrange 字段设置为 subrange_t struct 的地址。 设置 subrange_t struct su_offset , su_length , su_rstype 和 su_rsid 字段。 将忽略 subrange_t 结构中的其他字段。 内存分配策略是从 flags 参数获取的,而不是从 su_policy 字段获取的。
将 subrange_t su_rstype 字段设置为 R_PROCMEM ,将 su_rsid.at_pid 字段设置为RS_我以附加到用户进程中的内存范围。 将 subrange_t su_offset 字段设置为进程中范围的起始地址。 将 subrange_t su_length 字段设置为该过程中范围的长度。
注: subrange_t su_offset 和 su_length 字段必须是 4 KB 的 4。 为了获得最佳性能,这些字段必须是支持内存范围的页大小的倍数。 可以使用指定 VM_page_INFO 命令参数的 Vmgetinfo 子例程来获取用于备份内存范围的页大小。
|
| rstype2 |
指定要附加到工作组件的资源的类型。 rstype2 参数必须是 rset.h中定义的以下参数之一。
- R_RSET
- 资源集连接
- R_SRADID
- SRADID 附件
|
| rsid2 |
指定与 rstype2 参数关联的资源。 rsid2 参数必须为以下某个值:
- 资源集 (对于 R_RSET 的 rstype2 )
- 将 rsid_t at_rset 字段设置为期望的资源集。
- SRADID (R_SRADID 的 rstype2 的调度程序资源分配域标识)
- 将 rsid_t at_sradid 字段设置为期望的 sradid。 SRADID 可能仅连接到线程或内存范围。 可以在内存范围连接上指定 at_sradid 值 SRADID_ANY ,以指示分区中所有内存的内存亲缘关系首选项。
|
| 标志 |
指定内存分配和其他连接选项:
- 缺省值
- 缺省内存分配策略
- P_FIRST_TOUCH
- 第一个访问内存分配策略
- P_BALANCED
- 均衡内存分配策略
- r_migrate_async
- 异步迁移地址范围内的物理内存 (对于 R_SHM 或 R_subrange 的 rstype1 )
- R_MIGRATE_SYNC
- 同步迁移地址范围内的物理内存 (对于 R_SHM 或 R_subrange 的 rstype1 )
- 连接 (_ATTACH_STRSET)
- 将使用单线程策略来调度进程,每个物理处理器仅在一个硬件线程上 (对于 R_PROCESS 的 rstype1 )。
|
返回值
如果成功,那么将返回值 0。 如果不成功,将返回 -1 的值,并设置 errno 全局变量来指示错误。
错误代码
| 项 |
描述 |
| EINVAL |
发生了下列其中一种情况:
- 标志 参数包含无效的值。
- rstype1 或 rstype2 参数包含无效的类型标识。
|
| ENODEV |
发生了下列其中一种情况:
- 由 rstype2 和 rsid2 参数指定的资源集不包含任何可用的处理器。
- 指定了无效的 rsid2 SRADID。
|
| ENOTSUP |
发生了下列其中一种情况:
- 已尝试连接 SRADID ,并且已禁用 ENHANCED_AFFINITY。
- 已尝试将 SRADID 附加到文件。
- 发出了带有 su_rstype R_PROCMEM 的 R_SUBRANGE 请求,并且 su_rsid.at_pid 字段不是RS_着。
|
| ESRCH |
不存在由 rstype1 和 rsid1 参数指定的工作组件。 |
| EPERM |
发生了下列其中一种情况:
- rstype2 指定的 R_RSET 和调用进程既不具有 root 用户权限,也不具有 CAP_NUMA_ATTACH 连接特权。 j
- rstype2 指定的 R_RSET 和调用进程既没有 root 用户权限,也没有与 rstype1 和 rsid1 参数所标识的进程相同的有效用户标识。
- rstype2 指定的 R_RSET 或 R_SRADID 以及 rstype1 和 rsid1 参数指定的进程或线程工作组件具有一个或多个具有 bindprocessor 绑定的线程。
- rstype1 和 rsid1 参数指定了进程, rstype2 和 rsid2 参数指定了资源集。 该 rset 中的处理器未包括在进程的分区资源集内,或者指定进程中的线程具有不是 rstype1/rsid1 资源集的子集的资源集连接。
- rstype2 对具有资源集连接的内存范围指定了 R_SRADID 连接。
|