Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all 

名前
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() システムコールは、Cell Broadband Engine アーキテクチャーを実装した PowerPC マシンにおい て、Synergistic Processor Unit (SPU) にアクセスするために使用される。 このシステムコールは、 SPU に対する 新しい論理コンテキストを pathname に生成し、 そのコンテキストに関連付けられたファイルディスクリプターを返 す。 pathname は SPU ファイルシステム (spufs) のマウントポイント内の存在しないディレクトリを指していなけ ればならない。 spu_create() が成功すると、 pathname にディレクトリが生成され、 そのディレクトリに spufs(7) で説明されているファイル群が配置される。 コンテキストを作成した際、返されたファイルディスクリプターは、 spu_run(2) に渡すか、 *at 系のシステムコー ル (openat(2) など) の dirfd 引き数として使用するか、 クローズするか、しかできない。 他の操作は定義されて いない。 そのコンテキストへの最後の参照がなくなった際に、 論理 SPU コンテキストは破棄される (そのコンテキ ストの pathname ディレクトリに作成されたファイルもすべて破棄される)。 通常は spu_create() が返したファイ ルディスクリプターがクローズされた際に発生する。 flags 引き数には 0 か以下の定数の組み合わせ (ビット単位の論理和) を指定できる。 SPU_CREATE_EVENTS_ENABLED DMA エラーを通知するのにシグナルを使うのではなく、 spu_run(2) の event 引き数を使用する。 SPU_CREATE_GANG コンテキストの代わりに SPU gang を作成する。 (gang は、機能的に互いに関係していて、スケジューリン グパラメーター (優先度とポリシー) を共有する SPU コンテキストのグループである。 将来、 グループ全 体が一つの単位としてスイッチイン/スイッチアウトされる gang スケジューリングが実装されるかもしれな い。) pathname 引き数で指定された場所に新しいディレクトリが作成される。 この gang を使って他の SPU コン テキストを保持することができる。 それには、それ以降の spu_create() に gang ディレクトリ内のパス名 を渡す。 SPU_CREATE_NOSCHED SPU スケジューラーの影響を受けないコンテキストを作成する。 一度実行されると、 呼び出したプロセスが 破棄されるまでこのコンテキストがスケジューリングで追い出されることはない。 このコンテキストは SPU から削除されることはないので、 SPU_CREATE_NOSCHED コンテキストではいくつか の機能は無効にされる。 spufs のこのコンテキストのディレクトリでは一部のファイルだけができる。 ま た、 SPU_CREATE_NOSCHED コンテキストはクラッシュした際にコアファイルをダンプできない。 SPU_CREATE_NOSCHED コンテキストを作成するには CAP_SYS_NICE ケーパビリティが必要である。 SPU_CREATE_ISOLATE 隔離された SPU コンテキストを作成する。 隔離されたコンテキストはいくつかの PPE (PowerPC Processing Element) 命令から保護される。 SPU ローカルストアや NPC レジスターへのアクセスなどである。 SPU_CREATE_ISOLATE コンテキストを作成するには SPU_CREATE_NOSCHED フラグも指定する必要がある。 SPU_CREATE_AFFINITY_SPU 別の SPU コンテキストと affinity (親和性) を持ったコンテキストを作成する。 この affinity 情報は SPU スケジューリングアルゴリズムで使用される。 このフラグを使う際には、 他の SPU コンテキストを指 すファイルディスクリプターを neighbor_fd 引き数を渡す必要がある。 SPU_CREATE_AFFINITY_MEM システムメモリーと affinity (親和性) を持ったコンテキストを作成する。 この affinity 情報は SPU ス ケジューリングアルゴリズムで使用される。 mode 引き数 (からプロセスの umask(2) でセットされたビットを除いたもの) により、 spufs に作られる新しい ディレクトリで使用されるアクセス許可が決まる。 利用できる mode 値の完全なリストについては stat(2) を参 照。
返り値
成功すると、 spu_create() は新しいファイルディスクリプターを返す。 エラーの場合、-1 を返し、 errno に以下 のリストに記載のエラーコードのいずれかを設定する。
エラー
EACCES 現在のユーザーが spufs(7) のマウントポイントへの書き込み許可を持って いない。 EEXIST 指定されたパス名で SPU コンテキストがすでに生成されている。 EFAULT pathname が呼び出し元のプロセスのアドレス空間で有効な文字列ポインターではない。 EINVAL pathname が SPUFS マウントポイント内のディレクトリではない。 または、無効なフラグが指定された。 ELOOP pathname を解決するまでに辿ったシンボリックリンクが多過ぎた。 EMFILE そのプロセスがオープンできるファイル数の上限に達していた。 ENAMETOOLONG pathname が長過ぎる。 ENFILE システム全体でオープンできるファイル数の上限に達していた。 ENODEV 隔離されたコンテキストが要求されたが、 ハードウェアが SPU アイソレーションをサポートしていない。 ENOENT pathname の一部が解決できなかった。 ENOMEM カーネルが必要なリソースの全てを割り当てることができなかった。 ENOSPC 新しいコンテキストを生成するのに十分な SPU リソースがなかった、 または SPU コンテキスト数がその ユーザーの特定の上限に達していた。 ENOSYS 機能が動作中のシステムで提供されていない。理由は、 ハードウェアで SPU が提供されていないか、 spufs モジュールがロードされていないか、のどちらかである。 ENOTDIR pathname の一部がディレクトリではない。 EPERM SPU_CREATE_NOSCHED フラグが指定されたが、ユーザーが CAP_SYS_NICE ケーパビリティを持っていない。
ファイル
pathname は spufs のマウントポイントの配下の場所を指して いなければならない。 慣例では /spu にマウントさ れる。
バージョン
spu_create() システムコールはカーネル 2.6.16 で Linux に追加された。
準拠
このシステムコールは Linux 固有であり、 PowerPC アーキテクチャーでのみ実装されている。 このシステムコール を使ったプログラムは移植性がない。
注意
glibc はこのシステムコールに対するラッパー関数を提供していない。 syscall(2) を使うこと。ただし、 spu_create() は より抽象度の高い SPU へのインターフェースを実装するライブラリから 利用されることを意図し たものであり、通常のアプリケーションから 使用は意図されていない。推奨のライブラリについては ⟨http://www.bsc.es/projects/deepcomputing/linuxoncell/⟩ を参照のこと。
例
spu_create() の利用例については spu_run(2) を参照。
関連項目
close(2), spu_run(2), capabilities(7), spufs(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告 に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。