SPU_CREATE - Linux手册页
Linux程序员手册 第2部分
更新日期: 2020-06-09
名称
spu_create-创建一个新的spu上下文
语法
#include <sys/types.h> #include <sys/spu.h> int spu_create(const char *pathname, int flags, mode_t mode); int spu_create(const char *pathname, int flags, mode_t mode, int neighbor_fd);
注意:此系统调用没有glibc包装器。请参阅注释。
说明
spu_create()系统调用在实现单元宽带引擎体系结构的PowerPC机器上使用,以便访问协同处理器单元(SPU)。它在路径名中为SPU创建新的逻辑上下文,并返回与之关联的文件描述符。路径名必须引用SPU文件系统(spufs)挂载点中不存在的目录。如果spu_create()成功,则会在路径名下创建目录,并使用spufs(7)中描述的文件填充该目录。
创建上下文时,返回的文件描述符只能传递给spu_run(2),用作* at系列系统调用(例如openat(2))的dirfd参数,也可以关闭它;其他操作未定义。一旦对上下文的最后一个引用消失,则逻辑SPU上下文将被破坏(连同在上下文的路径名目录中创建的所有文件一起);这通常在关闭spu_create()返回的文件描述符时发生。
flags参数可以是零,也可以是以下常量的按位"或"组合:
- SPU_CREATE_EVENTS_ENABLED
- 与其使用信号来报告DMA错误,不如使用spu_run(2)的事件参数。
- SPU_CREATE_GANG
- 创建一个SPU帮派而不是上下文。 (帮派是一组SPU上下文,它们在功能上相互关联,并且共享通用的调度参数-优先级和策略。将来,可能会实施帮派调度,使该组作为一个单独的切入和切出单元。)
- 将在pathname参数指定的位置创建一个新目录。通过提供帮派目录中的路径名以进一步调用spu_create(),可以将该帮派用于保存其他SPU上下文。
- SPU_CREATE_NOSCHED
- 创建不受SPU调度程序影响的上下文。一旦上下文运行,它将不会被调度,直到被创建过程销毁为止。
- 由于无法从SPU中删除上下文,因此SPU_CREATE_NOSCHED上下文禁用了某些功能。在spufs中,此上下文目录中仅文件的子集可用。此外,崩溃时SPU_CREATE_NOSCHED上下文无法转储核心文件。
- 创建SPU_CREATE_NOSCHED上下文需要CAP_SYS_NICE功能。
- SPU_CREATE_ISOLATE
- 创建一个隔离的SPU上下文。隔离的上下文受到某些PPE(PowerPC处理元素)操作的保护,例如对SPU本地存储和NPC寄存器的访问。
- 创建SPU_CREATE_ISOLATE上下文也需要SPU_CREATE_NOSCHED标志。
- SPU_CREATE_AFFINITY_SPU
- 创建与另一个SPU上下文关联的上下文。此相似性信息在SPU调度算法中使用。使用此标志要求引用邻居SPU上下文的文件描述符在neighbor_fd参数中传递。
- SPU_CREATE_AFFINITY_MEM
- 创建与系统内存关联的上下文。此相似性信息在SPU调度算法中使用。
模式参数(减去进程的umask(2)中设置的任何位)指定用于在spufs中创建新目录的权限。有关可能的模式值的完整列表,请参见stat(2)。
返回值
成功后,spu_create()返回一个新的文件描述符。如果出错,则返回-1,并将errno设置为下面列出的错误代码之一。
错误说明
- EACCES
- 当前用户无权访问spufs(7)安装点。
- EEXIST
- 在给定的路径名下已经存在SPU上下文。
- EFAULT
- 在调用进程的地址空间中,路径名不是有效的字符串指针。
- EINVAL
- 路径名不是spufs(7)挂载点中的目录,或者提供了无效的标志。
- ELOOP
- 解析路径名时发现太多符号链接。
- EMFILE
- 已达到打开文件描述符数量的每个进程限制。
- ENAMETOOLONG
- 路径名太长。
- ENFILE
- 已达到系统范围内打开文件总数的限制。
- ENODEV
- 请求了隔离的上下文,但是硬件不支持SPU隔离。
- ENOENT
- 路径名的一部分无法解析。
- ENOMEM
- 内核无法分配所需的所有资源。
- ENOSPC
- 没有足够的SPU资源可用于创建新上下文,或者已达到SPU上下文数量的用户特定限制。
- ENOSYS
- 当前功能未提供该功能,因为硬件不提供SPU或未加载spufs模块。
- ENOTDIR
- 路径名的一部分不是目录。
- EPERM
- 已经给出了SPU_CREATE_NOSCHED标志,但是用户没有CAP_SYS_NICE功能。
文件
路径名必须指向spufs挂载点下方的位置。按照惯例,它会挂载在/ spu中。
版本
spu_create()系统调用已添加到内核2.6.16中的Linux中。
遵循规范
该调用特定于Linux,并且仅在PowerPC体系结构上实现。使用此系统调用的程序不可移植。
备注
Glibc没有为该系统调用提供包装器;使用syscall(2)调用它。但是请注意,spu_create()旨在从实现与SPU的抽象接口的库中使用,而不是从常规应用程序中使用。请参阅以获取推荐的库。
示例
有关使用spu_create()的示例,请参见spu_run(2)。
另外参见
close(2),spu_run(2),capabilities(7),spufs(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。