SPU_CREATE - Linux手册页

时间:2019-08-20 17:59:27  来源:igfitidea点击:

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/