名 前
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 フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。 |
count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errno を EINVAL に 設 定 す る 。 メ ー ル ボ ッ ク ス に デ ー タ が な い 場 合 、 −1 が 返 り 、 errno が EAGAIN に 設 定 さ れ る 。 デ ー タ の 読 み 出 し に 成 功 し た 場 合 、 4 バ イ ト が デ ー タ バ ッ フ ァ に 格 納 さ れ 、 返 り 値 と し て 4 が 返 さ れ る 。
/ibox |
SPU か ら CPU へ の 通 信 用 の 二 つ 目 の メ ー ル ボ ッ ク ス で あ る 。 こ の フ ァ イ ル は 一 つ 目 の メ ー ル ボ ッ ク ス フ ァ イ ル と 似 て い る が 、 停 止 (blocking) I/O モ ー ド で の 読 み 出 し が 可 能 で あ る 。 し た が っ て 、 poll(2) や 同 様 の シ ス テ ム コ ー ル を 使 っ て 、 こ の フ ァ イ ル を 監 視 す る こ と が で き る 。 オ ー プ ン さ れ た ibox フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。 |
count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errno を EINVAL に 設 定 す る 。 メ ー ル ボ ッ ク ス に デ ー タ が な い 場 合 、 フ ァ イ ル デ ィ ス ク リ プ タ が O_NONBLOCK で オ ー プ ン さ れ て い れ ば 、 返 り 値 は −1 と な り 、 errno は EAGAIN に 設 定 さ れ る 。 メ ー ル ボ ッ ク ス に デ ー タ が な い 場 合 で 、 フ ァ イ ル デ ィ ス ク リ プ タ が O_NONBLOCK な し で オ ー プ ン さ れ て い れ ば 、 SPU が 自 分 の 割 り 込 み メ ー ル ボ ッ ク ス チ ャ ネ ル (interrupt mailbox channel) に 書 き 込 み を 行 う ま で read(2) は 停 止 (block) す る 。 デ ー タ の 読 み 出 し に 成 功 し た 場 合 、 4 バ イ ト が デ ー タ バ ッ フ ァ に 格 納 さ れ 、 返 り 値 と し て 4 が 返 さ れ る 。
ibox フ ァ イ ル に 対 す る poll(2) は 、 読 み 出 し デ ー タ が 利 用 可 能 に な る 度 に (POLLIN | POLLRDNORM) を 返 す 。
/wbox |
CPU か ら SPU へ の 通 信 用 の メ ー ル ボ ッ ク ス 。 こ の フ ァ イ ル は 書 き 込 み 専 用 で 、 書 き 込 み は 32ビ ッ ト 単 位 で 行 う 。 メ ー ル ボ ッ ク ス が 一 杯 の 場 合 、 write(2) は 停 止 (block) し 、 poll(2) を 使 っ て メ ー ル ボ ッ ク ス に 再 度 空 き が で き る ま で 待 つ こ と が で き る 。 オ ー プ ン さ れ た wbox フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。 |
count が 4 よ り 小 さ い 場 合 、 write(2) は −1 を 返 し 、 errno を EINVAL に 設 定 す る 。 メ ー ル ボ ッ ク ス に 空 き 領 域 が な い 場 合 、 フ ァ イ ル デ ィ ス ク リ プ タ が O_NONBLOCK で オ ー プ ン さ れ て い れ ば 、 返 り 値 は −1 と な り 、 errno は EAGAIN に 設 定 さ れ る 。 メ ー ル ボ ッ ク ス に 空 き 領 域 が な い 場 合 で 、 フ ァ イ ル デ ィ ス ク リ プ タ が O_NONBLOCK な し で オ ー プ ン さ れ て い れ ば 、 SPU が 自 分 の PPE メ ー ル ボ ッ ク ス チ ャ ネ ル か ら 読 み 出 し を 行 う ま で write(2) は 停 止 (block) す る 。 デ ー タ の 書 き 込 み に 成 功 し た 場 合 、 返 り 値 と し て 4 が 返 さ れ る 。
wbox フ ァ イ ル に 対 す る poll(2) は 、 書 き 込 み 用 の 空 間 が 利 用 可 能 に な る 度 に (POLLOUT | POLLWRNORM) を 返 す 。
/mbox_stat, /ibox_stat, /wbox_stat こ れ ら の フ ァ イ ル は 読 み 出 し 専 用 で 、 各 メ ー ル ボ ッ ク ス の 現 在 の キ ュ ー 長 を 保 持 す る 。 具 体 的 に は 、 停 止 (blocking) せ ず に 、 mbox や ibox か ら 何 ワ ー ド を 読 み 出 す こ と が で き 、 wbox に 何 ワ ー ド を 書 き 込 む こ と が で き る か 、 と い う こ と で あ る 。 こ れ ら の フ ァ イ ル は 4 バ イ ト 単 位 で の み 読 み 出 し が 可 能 で 、 ビ ッ グ ・ エ ン デ ィ ア ン の 整 数 値 を 返 す 。 オ ー プ ン さ れ た *box_stat フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。
count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errno を EINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 デ ー タ バ ッ フ ァ に 4 バ イ ト の 値 が 書 き 込 ま れ る 。 こ の 値 は 、 各 メ ー ル ボ ッ ク ス に お い て 停 止 せ ず に 、 ま た は EAGAIN エ ラ ー な し で 、 読 み 出 し 可 能 な エ レ メ ン ト 数 (mbox_stat や ibox_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) に 渡 さ れ た 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 を 返 し 、 errno を EINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 デ ー タ バ ッ フ ァ に 4 バ イ ト の 値 が 書 き 込 ま れ る 。 書 き 込 ま れ る 値 は fpcr レ ジ ス タ の 現 在 の 値 で あ る 。
count が 4 よ り 小 さ い 場 合 、 write(2) は −1 を 返 し 、 errno を EINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 4 バ イ ト の 値 が デ ー タ バ ッ フ ァ か ら コ ピ ー さ れ 、 fpcr レ ジ ス タ の 値 が 更 新 さ れ る 。
/signal1, /signal2 こ れ ら の フ ァ イ ル に よ り SPU の 二 つ の シ グ ナ ル 通 知 チ ャ ネ ル (signal notification channel) に ア ク セ ス で き る 。 こ れ ら は 32 ビ ッ ト 単 位 の 読 み 書 き が で き る 。 こ れ ら の フ ァ イ ル の 一 つ に 書 き 込 み を 行 う と 、 そ の SPU の 割 り 込 み が 発 生 す る ト リ ガ ー と な る 。 シ グ ナ ル フ ァ イ ル へ 書 き 込 ま れ た 値 は 、 チ ャ ネ ル 経 由 で SPU で 読 み 出 し た り 、 こ の フ ァ イ ル 経 由 で ホ ス ト の ユ ー ザ 空 間 で 読 み 出 し た り で き る 。 SPU が 値 を 読 み 出 し た 後 で は 、 値 は 0 に リ セ ッ ト さ れ る 。 オ ー プ ン さ れ た signal1 や signal2 フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。
count が 4 よ り 小 さ い 場 合 、 read(2) は −1 を 返 し 、 errno を EINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 デ ー タ バ ッ フ ァ に 4 バ イ ト の 値 が 書 き 込 ま れ る 。 書 き 込 ま れ る 値 は 、 指 定 さ れ た シ グ ナ ル 通 知 レ ジ ス タ の 現 在 の 値 で あ る 。
count が 4 よ り 小 さ い 場 合 、 write(2) は −1 を 返 し 、 errno を EINVAL に 設 定 す る 。 そ れ 以 外 の 場 合 、 4 バ イ ト の 値 が デ ー タ バ ッ フ ァ か ら コ ピ ー さ れ 、 指 定 さ れ た シ グ ナ ル 通 知 レ ジ ス タ の 値 が 更 新 さ れ る 。 シ グ ナ ル 通 知 レ ジ ス タ の 更 新 に は 、 レ ジ ス タ 値 を 入 力 デ ー タ で 置 き 換 え る モ ー ド と 以 前 の 値 と 入 力 デ ー タ の ビ ッ ト 単 位 の OR を と っ た 値 に 更 新 す る モ ー ド が あ る 。 ど ち ら の モ ー ド に な る か は 、 そ れ ぞ れ signal1_type, signal2_type フ ァ イ ル の 内 容 に よ っ て 決 ま る 。
/signal1_type, /signal2_type こ れ ら の フ ァ イ ル は 、 シ グ ナ ル 通 知 フ ァ イ ル signal1 と signal2 の 動 作 を 変 更 す る 。 こ れ ら の フ ァ イ ル は 数 値 を 表 す ア ス キ ー 文 字 列 を 保 持 し 、 読 み 出 す と "1" か "0" の ど ち ら か が 得 ら れ る 。 モ ー ド 0 (上 書 き モ ー ド ) で は 、 ハ ー ド ウ ェ ア は シ グ ナ ル チ ャ ネ ル の 内 容 を シ グ ナ ル チ ャ ネ ル に 書 き 込 ま れ た デ ー タ で 置 き 換 え る 。 モ ー ド 1 (論 理 OR モ ー ド ) で は 、 ハ ー ド ウ ェ ア は シ グ ナ ル チ ャ ネ ル に 書 き 込 ま れ た ビ ッ ト を 積 算 し て い く 。 オ ー プ ン さ れ た signal1_type や signal2_type フ ァ イ ル に 可 能 な 操 作 は 以 下 で あ る 。
read(2) に 渡 さ れ た count が レ ジ ス タ の 数 値 と 改 行 (newline) 文 字 1 個 を 格 納 す る の に 必 要 な 長 さ よ り 短 い 場 合 、 同 じ フ ァ イ ル デ ィ ス ク リ プ タ を 続 け て read す る こ と で 、 文 字 列 全 体 を 読 み 出 す こ と が で き る 。 文 字 列 全 体 が 読 み 出 さ れ る と 、 そ れ 以 降 の read 操 作 で は 0 バ イ ト が 返 さ れ 、 新 し い 値 を 読 み 出 す に は 新 し い フ ァ イ ル デ ィ ス ク リ プ タ を オ ー プ ン す る 必 要 が あ る 。
write(2) こ の フ ァ イ ル へ の write(2) 操 作 は レ ジ ス タ 値 を 文 字 列 で 指 定 さ れ た 値 に 設 定 す る 。 文 字 列 の 解 釈 は 先 頭 か ら 開 始 さ れ 、 数 字 以 外 の 文 字 が 初 め て 登 場 す る か 、 バ ッ フ ァ の 末 尾 に 達 す る ま で 行 わ れ る 。 同 じ フ ァ イ ル デ ィ ス ク リ プ タ へ 続 け て write を 行 う と 、 後 の write に よ り 前 の 設 定 が 上 書 き さ れ る 。
例
/etc/fstab entry
none /spu spufs gid=spu 0 0