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

名前

       sched_setattr, sched_getattr - スケジューリングポリシーと属性の設定と取得を行なう

書式

       #include <sched.h>

       int sched_setattr(pid_t pid, const struct sched_attr *attr,
                         unsigned int flags);

       int sched_getattr(pid_t pid, const struct sched_attr *attr,
                         unsigned int size, unsigned int flags);

説明

   sched_setattr()
       sched_setattr() システムコールは、 pid で指定された ID を持つスレッドのスケジューリングポリシーと関連する
       属性を設定する。 pid が 0 の場合、呼び出したスレッド自身のスケジューリングポリシーと属性が設定される。

       現在のところ、 Linux では、 以下の「通常」の (つまり、リアルタイムではない)  スケジューリングポリシーが、
       policy に指定できる値としてサポートされている。

       SCHED_OTHER   標準の、ラウンドロビンによる時分割型のスケジューリングポリシー。

       SCHED_BATCH   「バッチ」形式でのプロセスの実行用。

       SCHED_IDLE    「非常に」低い優先度で動作するバックグラウンドジョブ用。

       どの実行可能スレッドを選択するかについて、より正確な制御を必要とする   時間の制約が厳しい特別なアプリケー
       ション用として、 いろいろな「リアルタイム」ポリシーもサポートされている。  プロセスがこれらのポリシーをい
       つ使用できるかを決めるルールについては、sched(7) を参照。 policy には以下のリアルタイムポリシーを指定でき
       る。

       SCHED_FIFO    ファーストイン、ファーストアウト型のポリシー。

       SCHED_RR      ラウンドロビン型のポリシー。

       Linux では以下のポリシーも提供されている。

       SCHED_DEADLINE
                     デッドライン (応答期限) ベースのスケジューリングポリシー。詳細は sched(7) を参照。

       attr 引き数は、  指定したスレッドの新しいスケジューリングポリシーと属性を定義した構造体へのポインターであ
       る。 この構造体は以下の形式である。

           struct sched_attr {
               u32 size;              /* この構造体のサイズ */
               u32 sched_policy;      /* ポリシー (SCHED_*) */
               u64 sched_flags;       /* フラグ */
               s32 sched_nice;        /* nice 値 (SCHED_OTHER,
                                         SCHED_BATCH) */
               u32 sched_priority;    /* 静的優先度 (SCHED_FIFO,
                                         SCHED_RR) */
               /* 残りのフィールドは SCHED_DEADLINE 用である */
               u64 sched_runtime;
               u64 sched_deadline;
               u64 sched_period;
           };

       この構造体のフィールドは以下の通りである。

       size   このフィールドには、 構造体のバイト単位のサイズを設定する。 sizeof(struct sched_attr) を指定すれば
              よい。 指定された構造体がカーネル構造体よりも小さい場合、 追加となるフィールドは 0  とみなされる。
              指定された構造体がカーネル構造体よりも大きい場合、 カーネルは追加のフィールドが 0 であるかを検査す
              る。 0 でない場合は sched_setattr() はエラー E2BIG で失敗するので、 size  をカーネル構造体のサイズ
              に更新する必要がある。

              ユーザー空間の  sched_attr  構造体のサイズがカーネル構造体のサイズと一致しなかった場合の上記の動作
              は、 このインターフェースを将来拡張できるようにするためである。 サイズが大きい構造体を渡す行儀の良
              くないアプリケーションも、  将来カーネルの sched_attr 構造体のサイズが大きくなったとしてもおかしく
              ならない。 この仕組みにより、 将来的には、 大きなユーザー空間 sched_attr  構造体があることを知って
              いるアプリケーションで、  大きいサイズの構造体に対応していない古いカーネル上で動作しているかを判定
              することができる。

       sched_policy
              このフィールドはスケジューリングポリシーを指定する。 上記のリストにある SCHED_* 値のいずれかを指定
              する。

       sched_flags
              このフィールドはスケジューリング動作の制御を行う。        現在のところ、サポートされているフラグは
              SCHED_FLAG_RESET_ON_FORK の一つだけである。 このフラグが指定されると、 fork(2)  で作成された子プロ
              セスは特権が必要なスケジューリングポリシーを継承しない。 詳細は sched(7) を参照。

       sched_nice
              このフィールドは、 sched_policySCHED_OTHERSCHED_BATCH が指定された場合に設定される nice 値
              を指定する。 nice 値は -20 (高優先度) から +19 (低優先度) の範囲の数値である。 setpriority(2) を参
              照。

       sched_priority
              このフィールドは、 sched_policySCHED_FIFOSCHED_RR が指定された場合に設定される静的優先度を
              指定する。     これらのポリシーで指定できる優先度の範囲は、      sched_get_priority_min(2)      と
              sched_get_priority_max(2)  を使って判定できる。 他のポリシーでは、 このフィールドには 0 を指定しな
              ければならない。

       sched_runtime
              このフィールドは、 デッドラインスケジューリングの "Runtime" パラメーターを指定する。  この値はナノ
              秒単位で表現される。 このフィールドと次の 2 つのフィールドは SCHED_DEADLINE スケジューリングにおい
              てのみ使用される。 詳細は sched(7) を参照。

       sched_deadline
              このフィールドは、 デッドラインスケジューリングの "Deadline" パラメーターを指定する。 この値はナノ
              秒単位で表現される。

       sched_period
              このフィールドは、 デッドラインスケジューリングの "Period" パラメーターを指定する。 この値はナノ秒
              単位で表現される。

       flags 引き数は、このインターフェースの将来の拡張のために用意されている。 現在の実装では 0  を指定しなけれ
       ばならない。

   sched_getattr()
       sched_getattr() システムコールは、 pid で指定された ID を持つスレッドのスケジューリングポリシーと関連する
       属性を取得する。 pid が 0  の場合、呼び出したスレッド自身のスケジューリングポリシーと関連する属性を取得す
       る。

       size  引き数には、  ユーザー空間での  sched_attr 構造体の大きさを設定する。 この値は、 少なくとも初期バー
       ジョンの sched_attr 構造体のサイズでなければならない。 そうでなかった場合、 エラー EINVAL  で呼び出しが失
       敗する。

       取得したスケジューリング属性は、  attr  が指す  sched_attr  構造体の各フィールドに格納される。 カーネルは
       attr.sizesched_attr 構造体のサイズを設定する。

       呼び出し側が提供した attr バッファーがカーネルの sched_attr 構造体よりも大きい場合、 ユーザー空間構造体の
       残りのバイトは変更されない。  呼び出し側が提供した構造体がカーネルの sched_attr 構造体よりも小さく、 カー
       ネルが値を返すのにもっと大きな空間が必要な場合、    sched_getattr()    はエラー    E2BIG     で失敗する。
       sched_setattr() と同様、 この動作はこのインターフェースの将来の拡張性を考慮してのものである。

       flags  引き数は、このインターフェースの将来の拡張のために用意されている。 現在の実装では 0 を指定しなけれ
       ばならない。

返り値

       成功した場合は sched_setattr()  と sched_getattr()  は 0 を返す。 エラーの場合は -1 が返され、 エラーの原
       因を示す値が errno に設定される。

エラー

       sched_getattr() と sched_setattr() の両方が以下の理由で失敗する。

       EINVAL attr が NULL である。 pid が負である。 flags が 0 以外である。

       ESRCH  ID が pid のスレッドが見つからなかった。

       さらに、 sched_getattr() は以下の理由でも失敗する。

       E2BIG  sizeattr で指定されたバッファーが小さすぎる。

       EINVAL size が無効である。つまり、 最初のバージョンの sched_attr 構造体 (48 バイト) よりも小さいか、 シス
              テムのページサイズよりも大きい。

       さらに、 sched_setattr() は以下の理由でも失敗する。

       E2BIG  sizeattr で指定されたバッファーがカーネル構造体よりも大きく、  一つ以上の超過バイトが  0  でな
              かった。

       EBUSY  SCHED_DEADLINE の流入制御の失敗については sched(7) を参照。

       EINVAL attr.sched_policy が認識できるポリシーではない。 attr.sched_flagsSCHED_FLAG_RESET_ON_FORK 以外
              のフラグが含まれている。 attr.sched_priority が無効である。  attr.sched_policySCHED_DEADLINE
              で、 attr に指定されたデッドラインスケジューリングパラメーターが無効である。

       EPERM  呼び出した元が適切な特権を持っていない。

       EPERM  呼び出し元の    CPU    affinity    マスクにシステムの全ての   CPU   のうち含まれていないものがある
              (sched_setaffinity(2) を参照)。

バージョン

       これらのシステムコールは Linux 3.14 で初めて登場した。

準拠

       これらのシステムコールは非標準の Linux による拡張である。

注意

       sched_setattr() は、sched_setscheduler(2), sched_setparam(2), nice(2) の機能および setpriority の一部機能
       を持つ (ただし、setpriority(2) の、指定されたユーザーに所属するすべてのプロセスまたは指定されたグループの
       すべてのプロセスの優先度を設定する機能は除く)。  同様に、   sched_getattr()   は   sched_getscheduler(2),
       sched_getparam(2) の機能および getpriority(2) の一部機能を持つ。

バグ

       バージョン  3.15  までの  Linux  では、  sched_settattr()  は、 エラーの節に書かれている E2BIG の場合にエ
       ラーEFAULT で失敗していた。

関連項目

       chrt(1), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getaffinity(2),
       sched_getscheduler(2), sched_getparam(2), sched_rr_get_interval(2), sched_setaffinity(2),
       sched_setscheduler(2), sched_setparam(2), sched_yield(2), setpriority(2), pthread_getschedparam(3),
       pthread_setschedparam(3), pthread_setschedprio(3), capabilities(7), cpuset(7), sched(7)

この文書について

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