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

名前

       spu_create - 新しい SPU コンテキストを生成する

書式

       #include <sys/types.h>
       #include <sys/spu.h>

       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() が返したファイルディスクリプターがクローズさ
       れた際に発生する。

       mode 引数 (からプロセスの umask(2) でセットされたビットを除いたもの) により、 spufs に作ら
       れる新しいディレクトリで使用されるアクセス許可が決まる。  利用できる mode 値の完全なリスト
       については stat(2) を参照。

       The neighbor_fd is used only when  the  SPU_CREATE_AFFINITY_SPU  flag  is  specified;  see
       below.

       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 (Linux 2.6.23 以降)
              別の SPU コンテキストと  affinity  (親和性)  を持ったコンテキストを作成する。  この
              affinity 情報は SPU スケジューリングアルゴリズムで使用される。 このフラグを使う際に
              は、 他の SPU コンテキストを指すファイルディスクリプターを neighbor_fd 引数を渡す必
              要がある。

       SPU_CREATE_AFFINITY_MEM (Linux 2.6.23 以降)
              システムメモリーと affinity (親和性) を持ったコンテキストを作成する。 この affinity
              情報は SPU スケジューリングアルゴリズムで使用される。

返り値

       成功すると、 spu_create() は新しいファイルディスクリプターを返す。  エラーの場合、-1  を返
       し、 errno に以下のリストに記載のエラーコードのいずれかを設定する。

エラー

       EACCES 現在のユーザーが spufs(7) のマウントポイントへの書き込み許可を持って いない。

       EEXIST 指定されたパス名で SPU コンテキストがすでに生成されている。

       EFAULT pathname が呼び出し元のプロセスのアドレス空間で有効な文字列ポインターではない。

       EINVAL pathname が SPUFS マウントポイント内のディレクトリではない。 または、無効なフラグが
              指定された。

       ELOOP  pathname を解決するまでに辿ったシンボリックリンクが多過ぎた。

       EMFILE The per-process limit on the number of open file descriptors has been reached.

       ENAMETOOLONG
              pathname が長過ぎる。

       ENFILE The system-wide limit on the total number of open files has been reached.

       ENODEV 隔離されたコンテキストが要求されたが、 ハードウェアが SPU  アイソレーションをサポー
              トしていない。

       ENOENT pathname の一部が解決できなかった。

       ENOMEM カーネルが必要なリソースの全てを割り当てることができなかった。

       ENOSPC 新しいコンテキストを生成するのに十分な SPU リソースがなかった、 または SPU コンテキ
              スト数がそのユーザーの特定の上限に達していた。

       ENOSYS 機能が動作中のシステムで提供されていない。理由は、 ハードウェアで SPU  が提供されて
              いないか、 spufs モジュールがロードされていないか、のどちらかである。

       ENOTDIR
              pathname の一部がディレクトリではない。

       EPERM  SPU_CREATE_NOSCHED  フラグが指定されたが、ユーザーが  CAP_SYS_NICE ケーパビリティを
              持っていない。

ファイル

       pathnamespufs  のマウントポイントの配下の場所を指して  いなければならない。  慣例では
       /spu にマウントされる。

バージョン

       spu_create() システムコールはカーネル 2.6.16 で Linux に追加された。

準拠

       このシステムコールは  Linux 固有であり、 PowerPC アーキテクチャーでのみ実装されている。 こ
       のシステムコールを使ったプログラムは移植性がない。

注意

       glibc  はこのシステムコールに対するラッパー関数を提供していない。   syscall(2)    を使うこ
       と。ただし、  spu_create()  は より抽象度の高い SPU へのインターフェースを実装するライブラ
       リから 利用されることを意図したものであり、通常のアプリケーションから 使用は意図されていな
       い。推奨のライブラリについては  ⟨http://www.bsc.es/projects/deepcomputing/linuxoncell/⟩ を
       参照のこと。

       Prior  to  the  addition  of  the  SPU_CREATE_AFFINITY_SPU  flag  in  Linux  2.6.23,   the
       spu_create()   system  call  took  only  three  arguments  (i.e., there was no neighbor_fd
       argument).

       spu_create() の利用例については spu_run(2) を参照。

関連項目

       close(2), spu_run(2), capabilities(7), spufs(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。