SPUFS - Linux手册页
Linux程序员手册 第7部分
更新日期: 2020-06-09
名称
spufs-SPU文件系统
说明
SPU文件系统在实现单元宽带引擎体系结构的PowerPC机器上使用,以便访问协同处理器单元(SPU)。
文件系统提供的名称空间类似于POSIX共享内存或消息队列。对文件系统具有写权限的用户可以使用spu_create(2)在spufs根目录下建立SPU上下文。
每个SPU上下文由包含预定义文件集的目录表示。这些文件可用于操纵逻辑SPU的状态。用户可以更改文件的权限,但不能添加或删除文件。
Mount options
- uid=<uid>
- 设置拥有挂载点的用户;默认值为0(根)。
- gid=<gid>
- 设置拥有安装点的组;默认值为0(根)。
- mode=<mode>
- 将spufs中的顶级目录的模式设置为八进制模式字符串。默认值为0775。
Files
spufs中的文件大多遵循常规系统调用(例如read(2)或write(2))的标准行为,但通常仅支持常规文件系统支持的部分操作。该列表详细说明了受支持的操作以及与相应手册页中描述的标准行为的偏差。
所有支持read(2)操作的文件也都支持readv(2),所有支持write(2)操作的文件也都支持writev(2)。所有文件都支持access(2)和stat(2)系列操作,但是对于后面的调用,返回的stat结构中唯一包含可靠信息的字段是st_mode,st_nlink,st_uid和st_gid。
所有文件都支持chmod(2)/ fchmod(2)和chown(2)/ fchown(2)操作,但是将无法授予与可能的操作相冲突的权限(例如,对wbox文件的读取访问权限)。
当前文件集为:
- /capabilities
- Contains a comma-delimited string representing the capabilities of this
SPU context.
Possible capabilities are:
- sched
- 可以安排该上下文。
- step
- 可以在单步模式下运行此上下文以进行调试。
将来可能会添加新的功能标志。
- /mem
- the contents of the local storage memory of the SPU.
This can be accessed like a regular shared memory
file and contains both code and data in the address
space of the SPU.
The possible operations on an open
mem
file are:
- /regs
- 包含SPU上下文的已保存通用寄存器。该文件按顺序包含从寄存器0到寄存器127的每个寄存器的128位值。这允许检查通用寄存器以进行调试。
- 读取或写入该文件要求安排上下文,因此在正常程序操作中建议不要使用此文件。
- 在使用SPU_CREATE_NOSCHED标志创建的上下文中不存在regs文件。
- /mbox
- The first SPU-to-CPU communication mailbox.
This file is read-only and can be read in units of 4 bytes.
The file can be used only in nonblocking mode - even
poll(2)
cannot be used to block on this file.
The only possible operation on an open
mboxfile is:
- /ibox
- 第二个SPU到CPU的通信邮箱。该文件类似于第一个邮箱文件,但是可以在阻止I / O模式下读取,因此,在打开的ibox文件上调用read(2)将会阻止,直到SPU将数据写入其中断邮箱通道为止(除非该文件具有使用O_NONBLOCK打开,请参见下文)。此外,poll(2)和类似的系统调用可用于监视邮箱数据的存在。
- The possible operations on an open
ibox
file are:
- /wbox
- The CPU-to-SPU communication mailbox.
It is write-only and can be written in units of four bytes.
If the mailbox is full,
write(2)
will block, and
poll(2)can be used to block until the mailbox is available for writing again.
The possible operations on an open
wboxfile are:
- /mbox_stat, /ibox_stat, /wbox_stat
- These are read-only files that contain the length of the current
queue of each mailbox---that is, how many words can be read from
mboxor ibox
or how many words can be written to
wboxwithout blocking.
The files can be read only in four-byte units and return
a big-endian binary integer number.
The only possible operation on an open
*box_statfile is:
- /npc, /decr, /decr_status, /spu_tag_mask, /event_mask, /event_status, /srr0, /lslr
- SPU的内部寄存器。这些文件包含一个ASCII字符串,表示指定寄存器的十六进制值。对这些文件的读写(npc除外,请参见下文)要求将SPU上下文安排好,因此建议不要在正常程序操作中频繁访问这些文件。
- The contents of these files are:
- npc
- 下一个程序计数器-仅在SPU处于停止状态时有效。
- decr
- SPU减量器
- decr_status
- 递减器状态
- spu_tag_mask
- SPU DMA的MFC标签屏蔽
- event_mask
- SPU中断的事件掩码
- event_status
- 待处理的SPU事件数(只读)
- srr0
- 中断返回地址寄存器
- lslr
- 本地商店限制记录
- The possible operations on these files are:
- /fpcr
- This file provides access to the Floating Point Status and
Control Register (fcpr) as a binary, four-byte file.
The operations on the
fpcr
file are:
- /signal1, /signal2
- The files provide access to the two signal notification channels
of an SPU.
These are read-write files that operate on four-byte words.
Writing to one of these files triggers an interrupt on the SPU.
The value written to the signal files can
be read from the SPU through a channel read or from
host user space through the file.
After the value has been read by the SPU, it is reset to zero.
The possible operations on an open
signal1
or
signal2file are:
- /signal1_type, /signal2_type
- These two files change the behavior of the
signal1
and
signal2notification files.
They contain a numeric ASCII string which is read
as either "1" or "0".
In mode 0 (overwrite), the hardware replaces the contents
of the signal channel with the data that is written to it.
In mode 1 (logical OR), the hardware accumulates the bits
that are subsequently written to it.
The possible operations on an open
signal1_typeor
signal2_typefile are:
- /mbox_info, /ibox_info, /wbox_info, /dma_into, /proxydma_info
- 包含SPU邮箱和DMA队列的已保存状态的只读文件。这允许检查SPU状态,主要用于调试。 mbox_info和ibox_info文件每个都包含SPU写入的四字节邮箱消息。如果没有消息写入这些邮箱,则这些文件的内容是不确定的。 mbox_stat,ibox_stat和wbox_stat文件包含可用的邮件数。
- wbox_info文件包含一个四字节的邮箱消息数组,这些消息已发送到SPU。在当前的CBEA机器中,数组的长度为4个项目,因此最多可以从该文件读取4 * 4 = 16个字节。如果任何邮箱队列条目为空,则未定义在相应位置读取的字节。
- dma_info文件包含SPU MFC DMA队列的内容,表示为以下结构:
struct spu_dma_info { uint64_t dma_info_type; uint64_t dma_info_mask; uint64_t dma_info_status; uint64_t dma_info_stall_and_notify; uint64_t dma_info_atomic_command_status; struct mfc_cq_sr dma_info_command_data[16]; };
- 该数据结构的最后一个成员是实际的DMA队列,其中包含16个条目。 mfc_cq_sr结构定义为:
struct mfc_cq_sr { uint64_t mfc_cq_data0_RW; uint64_t mfc_cq_data1_RW; uint64_t mfc_cq_data2_RW; uint64_t mfc_cq_data3_RW; };
- proxydma_info文件包含类似的信息,但是描述了代理DMA队列(即,由SPU外部实体发起的DMA)。该文件的格式如下:
struct spu_proxydma_info { uint64_t proxydma_info_type; uint64_t proxydma_info_mask; uint64_t proxydma_info_status; struct mfc_cq_sr proxydma_info_command_data[8]; };
- 访问这些文件要求将SPU上下文安排在外-频繁使用可能效率低下。这些文件不应用于正常的程序操作。
- 这些文件不存在于使用SPU_CREATE_NOSCHED标志创建的上下文中。
- /cntl
- This file provides access to the SPU Run Control and SPU status registers, as an ASCII string. The following operations are supported:
- /mfc
- Provides access to the Memory Flow Controller of the SPU.
Reading from the file returns the contents of the
SPU's MFC Tag Status register, and
writing to the file initiates a DMA from the MFC.
The following operations are supported:
- write(2)
- 写入该文件必须采用MFC DMA命令的格式,定义如下:
struct mfc_dma_command { int32_t pad; /* reserved */ uint32_t lsa; /* local storage address */ uint64_t ea; /* effective address */ uint16_t size; /* transfer size */ uint16_t tag; /* command tag */ uint16_t class; /* class ID */ uint16_t cmd; /* command opcode */ };
- 要求写入的大小正好为sizeof(struct mfc_dma_command)个字节。该命令将被发送到SPU的MFC代理队列,并将标记存储在内核中(请参见下文)。
- read(2)
- 读取标签状态寄存器的内容。如果以阻止模式打开文件(即不使用O_NONBLOCK),则读取将被阻止直到DMA标记(由上一次写入执行)完成为止。在非阻塞模式下,将不等待返回MFC标签状态寄存器。
- poll(2)
- 在mfc文件上调用poll(2)将阻塞,直到可以启动新的DMA(通过检查POLLOUT)或直到先前启动的DMA(通过检查POLLIN)完成为止。
- / mss提供对MFC多源同步(MSS)工具的访问。通过mmap(2)处理此文件,进程可以访问SPU的MSS区域。
- 支持以下操作:
- mmap(2)
- 通过将mss映射到进程地址空间,可以访问进程地址空间内的SPU MSS区域。仅允许MAP_SHARED映射。
- /psmap
- 提供对SPU整个问题状态映射的访问。应用程序可以使用此区域连接到SPU,而不用写入spufs中的单个寄存器文件。
- The following operations are supported:
- mmap(2)
- 映射psmap为进程提供了SPU问题状态区域的直接映射。仅支持MAP_SHARED映射。
- /phys-id
- 只读文件,其中包含运行SPU上下文的物理SPU编号。当上下文未运行时,此文件包含字符串" -1"。
- 物理SPU编号由ASCII十六进制字符串给出。
- /object-id
- Allows applications to store (or retrieve) a single 64-bit ID into the context. This ID is later used by profiling tools to uniquely identify the context.
示例
- /etc/fstabentry
- 无/ spu spufs gid = spu 0 0
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。