Manpages

名 前

spufs − SPU フ ァ イ ル シ ス テ ム

説 明

SPU フ ァ イ ル シ ス テ ム は 、 Cell Broadband Engine ア ー キ テ ク チ ャ を 実 装 し た PowerPC マ シ ン に お い て 、 Synergistic Processor Unit (SPU) に ア ク セ ス す る た め に 使 用 さ れ る 。 こ の フ ァ イ ル シ ス テ ム で は 、 POSIX 共 有 メ モ リ や メ ッ セ ー ジ キ ュ ー に 似 た 名 前 空 間 が 提 供 さ れ る 。 フ ァ イ ル シ ス テ ム に 書 き 込 み 許 可 を 持 つ ユ ー ザ は spu_create(2) を 使 っ て spufs の ル ー ト デ ィ レ ク ト リ に SPU コ ン テ キ ス ト を 作 成 で き る 。 各 SPU コ ン テ キ ス ト は 、 あ ら か じ め 定 義 さ れ た フ ァ イ ル 群 を 含 む デ ィ レ ク ト リ と し て 表 現 さ れ る 。 こ れ ら の フ ァ イ ル を 使 っ て 、 論 理 SPU の 状 態 を 操 作 で き る 。 ユ ー ザ は こ れ ら の フ ァ イ ル の ア ク セ ス 許 可 を 変 更 す る こ と は で き る が 、 フ ァ イ ル の 追 加 ・ 削 除 を 行 う こ と は で き な い 。 マ ウ ン ト オ プ シ ョ ン
uid=<uid>
マ ウ ン ト ポ イ ン ト を 所 有 す る ユ ー ザ を 設 定 す る 。 デ フ ォ ル ト は 0 (root) で あ る 。
gid=<gid>
マ ウ ン ト ポ イ ン ト を 所 有 す る グ ル ー プ を 設 定 す る 。 デ フ ォ ル ト は 0 (root) で あ る 。 フ ァ イ ル
spufs
の フ ァ イ ル は 、 ほ と ん ど の 場 合 read(2)write(2) と い っ た 通 常 の シ ス テ ム コ ー ル に 対 す る 標 準 的 な 振 る 舞 い を 示 す が 、 多 く の 場 合 通 常 の フ ァ イ ル シ ス テ ム で サ ポ ー ト さ れ て い る 操 作 の 一 部 分 だ け が サ ポ ー ト さ れ て い る 。 以 下 の リ ス ト で は 、 サ ポ ー ト さ れ て い る 操 作 と そ れ ぞ れ の マ ニ ュ ア ル ペ ー ジ に 書 か れ て い る 標 準 的 な 振 る 舞 い と の 違 い に つ い て 説 明 す る 。

read(2) 操 作 に 対 応 し て い る 全 て の フ ァ イ ル は readv(2) に も 対 応 し て い る 。 ま た 、 write(2) 操 作 に 対 応 し て い る 全 て の フ ァ イ ル は writev(2) に も 対 応 し て い る 。 全 て の フ ァ イ ル は 、 access(2)stat(2) 系 の 操 作 に 対 応 し て い る が 、 stat(2) で は 、 呼 び 出 し た 際 に 返 さ れ る stat 構 造 体 の フ ィ ー ル ド の う ち 信 頼 で き る 情 報 が 入 っ て い る の は st_mode, st_nlink, st_uid, st_gid だ け で あ る 。 全 て の フ ァ イ ル は chmod(2)/fchmod(2) と chown(2)/fchown(2) の 操 作 に 対 応 し て い る が 、 そ の フ ァ イ ル が 対 応 し て い る 操 作 と 矛 盾 す る ア ク セ ス 許 可 を 付 与 す る こ と は で き な い (例 え ば 、 wbox フ ァ イ ル に 対 す る 読 み 出 し ア ク セ ス な ど )。 現 時 点 で の フ ァ イ ル は 以 下 の 通 り で あ る 。

/mem

SPU の ロ ー カ ル ス ト レ ー ジ の 内 容 。 こ の フ ァ イ ル は 通 常 の 共 有 メ モ リ フ ァ イ ル と 同 様 に ア ク セ ス で き 、 SPU の ア ド レ ス 空 間 に は コ ー ド と デ ー タ の 両 方 を 格 納 で き る 。 オ ー プ ン さ れ た mem フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。

read(2), pread(2), write(2), pwrite(2), lseek(2) こ れ ら は 通 常 通 り 動 作 す る が 、 フ ァ イ ル 末 尾 を 越 え て の lseek(2), write(2), pwrite(2) に 対 応 し て い な い 点 だ け が 異 な る 。 フ ァ イ ル サ イ ズ は SPU の ロ ー カ ル ス ト レ ー ジ の サ イ ズ で あ り 、 通 常 は 256 キ ロ バ イ ト で あ る 。
mmap(2)

mem を プ ロ セ ス の ア ド レ ス 空 間 に マ ッ ピ ン グ す る と 、 プ ロ セ ス の ア ド レ ス 空 間 の 一 部 と し て SPU の ロ ー カ ル ・ ス ト レ ー ジ に ア ク セ ス で き る よ う に な る 。

/mbox

SPU か ら CPU へ の 通 信 用 の 一 つ 目 の メ ー ル ボ ッ ク ス 。 こ の フ ァ イ ル は 読 み 出 し 専 用 で 、 読 み 出 し は 32ビ ッ ト 単 位 で 行 う 。 こ の フ ァ イ ル は 非 停 止 (non-blocking) モ ー ド で の み 使 用 で き 、 poll(2) で あ っ て も こ の フ ァ イ ル で 停 止 (block) す る こ と は な い 。 オ ー プ ン さ れ た mbox フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。

read(2)

count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errnoEINVAL に 設 定 す る 。 メ ー ル ボ ッ ク ス に デ ー タ が な い 場 合 、 −1 が 返 り 、 errnoEAGAIN に 設 定 さ れ る 。 デ ー タ の 読 み 出 し に 成 功 し た 場 合 、 4 バ イ ト が デ ー タ バ ッ フ ァ に 格 納 さ れ 、 返 り 値 と し て 4 が 返 さ れ る 。

/ibox

SPU か ら CPU へ の 通 信 用 の 二 つ 目 の メ ー ル ボ ッ ク ス で あ る 。 こ の フ ァ イ ル は 一 つ 目 の メ ー ル ボ ッ ク ス フ ァ イ ル と 似 て い る が 、 停 止 (blocking) I/O モ ー ド で の 読 み 出 し が 可 能 で あ る 。 し た が っ て 、 poll(2) や 同 様 の シ ス テ ム コ ー ル を 使 っ て 、 こ の フ ァ イ ル を 監 視 す る こ と が で き る 。 オ ー プ ン さ れ た ibox フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。

read(2)

count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errnoEINVAL に 設 定 す る 。 メ ー ル ボ ッ ク ス に デ ー タ が な い 場 合 、 フ ァ イ ル デ ィ ス ク リ プ タ が O_NONBLOCK で オ ー プ ン さ れ て い れ ば 、 返 り 値 は −1 と な り 、 errnoEAGAIN に 設 定 さ れ る 。 メ ー ル ボ ッ ク ス に デ ー タ が な い 場 合 で 、 フ ァ イ ル デ ィ ス ク リ プ タ が O_NONBLOCK な し で オ ー プ ン さ れ て い れ ば 、 SPU が 自 分 の 割 り 込 み メ ー ル ボ ッ ク ス チ ャ ネ ル (interrupt mailbox channel) に 書 き 込 み を 行 う ま で read(2) は 停 止 (block) す る 。 デ ー タ の 読 み 出 し に 成 功 し た 場 合 、 4 バ イ ト が デ ー タ バ ッ フ ァ に 格 納 さ れ 、 返 り 値 と し て 4 が 返 さ れ る 。

poll(2)

ibox フ ァ イ ル に 対 す る poll(2) は 、 読 み 出 し デ ー タ が 利 用 可 能 に な る 度 に (POLLIN | POLLRDNORM) を 返 す 。

/wbox

CPU か ら SPU へ の 通 信 用 の メ ー ル ボ ッ ク ス 。 こ の フ ァ イ ル は 書 き 込 み 専 用 で 、 書 き 込 み は 32ビ ッ ト 単 位 で 行 う 。 メ ー ル ボ ッ ク ス が 一 杯 の 場 合 、 write(2) は 停 止 (block) し 、 poll(2) を 使 っ て メ ー ル ボ ッ ク ス に 再 度 空 き が で き る ま で 待 つ こ と が で き る 。 オ ー プ ン さ れ た wbox フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。

write(2)

count が 4 よ り 小 さ い 場 合 、 write(2) は −1 を 返 し 、 errnoEINVAL に 設 定 す る 。 メ ー ル ボ ッ ク ス に 空 き 領 域 が な い 場 合 、 フ ァ イ ル デ ィ ス ク リ プ タ が O_NONBLOCK で オ ー プ ン さ れ て い れ ば 、 返 り 値 は −1 と な り 、 errnoEAGAIN に 設 定 さ れ る 。 メ ー ル ボ ッ ク ス に 空 き 領 域 が な い 場 合 で 、 フ ァ イ ル デ ィ ス ク リ プ タ が O_NONBLOCK な し で オ ー プ ン さ れ て い れ ば 、 SPU が 自 分 の PPE メ ー ル ボ ッ ク ス チ ャ ネ ル か ら 読 み 出 し を 行 う ま で write(2) は 停 止 (block) す る 。 デ ー タ の 書 き 込 み に 成 功 し た 場 合 、 返 り 値 と し て 4 が 返 さ れ る 。

poll(2)

wbox フ ァ イ ル に 対 す る poll(2) は 、 書 き 込 み 用 の 空 間 が 利 用 可 能 に な る 度 に (POLLOUT | POLLWRNORM) を 返 す 。

/mbox_stat, /ibox_stat, /wbox_stat こ れ ら の フ ァ イ ル は 読 み 出 し 専 用 で 、 各 メ ー ル ボ ッ ク ス の 現 在 の キ ュ ー 長 を 保 持 す る 。 具 体 的 に は 、 停 止 (blocking) せ ず に 、 mboxibox か ら 何 ワ ー ド を 読 み 出 す こ と が で き 、 wbox に 何 ワ ー ド を 書 き 込 む こ と が で き る か 、 と い う こ と で あ る 。 こ れ ら の フ ァ イ ル は 4 バ イ ト 単 位 で の み 読 み 出 し が 可 能 で 、 ビ ッ グ ・ エ ン デ ィ ア ン の 整 数 値 を 返 す 。 オ ー プ ン さ れ た *box_stat フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。

read(2)

count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errnoEINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 デ ー タ バ ッ フ ァ に 4 バ イ ト の 値 が 書 き 込 ま れ る 。 こ の 値 は 、 各 メ ー ル ボ ッ ク ス に お い て 停 止 せ ず に 、 ま た は EAGAIN エ ラ ー な し で 、 読 み 出 し 可 能 な エ レ メ ン ト 数 (mbox_statibox_stat の 場 合 )、 書 き 込 み 可 能 な エ レ メ ン ト 数 (wbox_stat の 場 合 ) で あ る 。

/npc, /decr, /decr_status, /spu_tag_mask, /event_mask, /srr0 こ れ ら の フ ァ イ ル は SPU の 内 部 レ ジ ス タ を 公 開 す る も の で あ る 。 値 は 、 各 レ ジ ス タ の 数 値 を 含 む ア ス キ ー 文 字 列 で 表 現 さ れ る 。 こ れ ら の フ ァ イ ル は デ バ ッ グ 用 と し て 読 み 出 し /書 き 込 み の 両 モ ー ド で 利 用 で き る が 、 プ ロ グ ラ ム の 通 常 の 操 作 は こ れ ら の フ ァ イ ル に 依 存 す べ き で は な い 。 な ぜ な ら 、 こ れ ら の フ ァ イ ル の う ち npc 以 外 へ の ア ク セ ス で は SPU コ ン テ キ ス ト の 保 存 が 必 須 で あ り 、 SPU コ ン テ キ ス ト の 保 存 は 非 常 に 効 率 が 悪 い か ら で あ る 。 こ れ ら の フ ァ イ ル の 内 容 は 以 下 の 通 り 。

npc 次 の プ ロ グ ラ ム カ ウ ン タ

decr

SPU Decrementer

decr_status

Decrementer の 状 態

spu_tag_mask

SPU の DMA 用 の MFA タ グ マ ス ク

event_mask

SPU の 割 り 込 み の イ ベ ン ト マ ス ク

srr0

割 り 込 み リ タ ー ン ア ド レ ス レ ジ ス タ こ れ ら の フ ァ イ ル に 対 し て 可 能 な 操 作 は 以 下 で あ る 。

read(2)

read(2) に 渡 さ れ た count が レ ジ ス タ 値 と 改 行 (newline) 文 字 1 個 を 格 納 す る の に 必 要 な 長 さ よ り 短 い 場 合 、 同 じ フ ァ イ ル デ ィ ス ク リ プ タ を 続 け て read す る こ と で 、 文 字 列 全 体 を 読 み 出 す こ と が で き る 。 こ の 際 、 実 行 中 の SPU タ ス ク に よ り レ ジ ス タ 値 の 変 更 の 影 響 は 受 け な い 。 文 字 列 全 体 が 読 み 出 さ れ る と 、 そ れ 以 降 の read 操 作 で は 0 バ イ ト が 返 さ れ 、 新 し い 値 を 読 み 出 す に は 新 し い フ ァ イ ル デ ィ ス ク リ プ タ を オ ー プ ン す る 必 要 が あ る 。

write(2) こ の フ ァ イ ル へ の write(2) 操 作 は レ ジ ス タ 値 を 文 字 列 で 指 定 さ れ た 値 に 設 定 す る 。 文 字 列 の 解 釈 は 先 頭 か ら 開 始 さ れ 、 数 字 以 外 の 文 字 が 初 め て 登 場 す る か 、 バ ッ フ ァ の 末 尾 に 達 す る ま で 行 わ れ る 。 同 じ フ ァ イ ル デ ィ ス ク リ プ タ へ 続 け て write を 行 う と 、 後 の write に よ り 前 の 設 定 が 上 書 き さ れ る 。

/fpcr こ の フ ァ イ ル に よ り

Floating Point Status and Control Register に

ア ク セ ス で き る 。 こ の フ ァ イ ル は 大 き さ 4 バ イ ト で あ る 。 fpcr フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。
read(2)

count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errnoEINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 デ ー タ バ ッ フ ァ に 4 バ イ ト の 値 が 書 き 込 ま れ る 。 書 き 込 ま れ る 値 は fpcr レ ジ ス タ の 現 在 の 値 で あ る 。

write(2)

count が 4 よ り 小 さ い 場 合 、 write(2) は −1 を 返 し 、 errnoEINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 4 バ イ ト の 値 が デ ー タ バ ッ フ ァ か ら コ ピ ー さ れ 、 fpcr レ ジ ス タ の 値 が 更 新 さ れ る 。

/signal1, /signal2 こ れ ら の フ ァ イ ル に よ り SPU の 二 つ の シ グ ナ ル 通 知 チ ャ ネ ル (signal notification channel) に ア ク セ ス で き る 。 こ れ ら は 32 ビ ッ ト 単 位 の 読 み 書 き が で き る 。 こ れ ら の フ ァ イ ル の 一 つ に 書 き 込 み を 行 う と 、 そ の SPU の 割 り 込 み が 発 生 す る ト リ ガ ー と な る 。 シ グ ナ ル フ ァ イ ル へ 書 き 込 ま れ た 値 は 、 チ ャ ネ ル 経 由 で SPU で 読 み 出 し た り 、 こ の フ ァ イ ル 経 由 で ホ ス ト の ユ ー ザ 空 間 で 読 み 出 し た り で き る 。 SPU が 値 を 読 み 出 し た 後 で は 、 値 は 0 に リ セ ッ ト さ れ る 。 オ ー プ ン さ れ た signal1signal2 フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。

read(2)

count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errnoEINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 デ ー タ バ ッ フ ァ に 4 バ イ ト の 値 が 書 き 込 ま れ る 。 書 き 込 ま れ る 値 は 、 指 定 さ れ た シ グ ナ ル 通 知 レ ジ ス タ の 現 在 の 値 で あ る 。

write(2)

count が 4 よ り 小 さ い 場 合 、 write(2) は −1 を 返 し 、 errnoEINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 4 バ イ ト の 値 が デ ー タ バ ッ フ ァ か ら コ ピ ー さ れ 、 指 定 さ れ た シ グ ナ ル 通 知 レ ジ ス タ の 値 が 更 新 さ れ る 。 シ グ ナ ル 通 知 レ ジ ス タ の 更 新 に は 、 レ ジ ス タ 値 を 入 力 デ ー タ で 置 き 換 え る モ ー ド と 以 前 の 値 と 入 力 デ ー タ の ビ ッ ト 単 位 の OR を と っ た 値 に 更 新 す る モ ー ド が あ る 。 ど ち ら の モ ー ド に な る か は 、 そ れ ぞ れ signal1_type, signal2_type フ ァ イ ル の 内 容 に よ っ て 決 ま る 。

/signal1_type, /signal2_type こ れ ら の フ ァ イ ル は 、 シ グ ナ ル 通 知 フ ァ イ ル signal1signal2 の 動 作 を 変 更 す る 。 こ れ ら の フ ァ イ ル は 数 値 を 表 す ア ス キ ー 文 字 列 を 保 持 し 、 読 み 出 す と "1" か "0" の ど ち ら か が 得 ら れ る 。 モ ー ド 0 (上 書 き モ ー ド ) で は 、 ハ ー ド ウ ェ ア は シ グ ナ ル チ ャ ネ ル の 内 容 を シ グ ナ ル チ ャ ネ ル に 書 き 込 ま れ た デ ー タ で 置 き 換 え る 。 モ ー ド 1 (論 理 OR モ ー ド ) で は 、 ハ ー ド ウ ェ ア は シ グ ナ ル チ ャ ネ ル に 書 き 込 ま れ た ビ ッ ト を 積 算 し て い く 。 オ ー プ ン さ れ た signal1_typesignal2_type フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。

read(2)

read(2) に 渡 さ れ た count が レ ジ ス タ の 数 値 と 改 行 (newline) 文 字 1 個 を 格 納 す る の に 必 要 な 長 さ よ り 短 い 場 合 、 同 じ フ ァ イ ル デ ィ ス ク リ プ タ を 続 け て read す る こ と で 、 文 字 列 全 体 を 読 み 出 す こ と が で き る 。 文 字 列 全 体 が 読 み 出 さ れ る と 、 そ れ 以 降 の read 操 作 で は 0 バ イ ト が 返 さ れ 、 新 し い 値 を 読 み 出 す に は 新 し い フ ァ イ ル デ ィ ス ク リ プ タ を オ ー プ ン す る 必 要 が あ る 。

write(2) こ の フ ァ イ ル へ の write(2) 操 作 は レ ジ ス タ 値 を 文 字 列 で 指 定 さ れ た 値 に 設 定 す る 。 文 字 列 の 解 釈 は 先 頭 か ら 開 始 さ れ 、 数 字 以 外 の 文 字 が 初 め て 登 場 す る か 、 バ ッ フ ァ の 末 尾 に 達 す る ま で 行 わ れ る 。 同 じ フ ァ イ ル デ ィ ス ク リ プ タ へ 続 け て write を 行 う と 、 後 の write に よ り 前 の 設 定 が 上 書 き さ れ る 。

/etc/fstab entry

none /spu spufs gid=spu 0 0

関 連 項 目

close(2), spu_create(2), spu_run(2)