名 前
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_policy
に SCHED_OTHER か SCHED_BATCH
が 指 定 さ れ た
場 合 に 設 定 さ
れ る nice 値 を 指 定
す る 。 nice 値 は −20
(高 優 先 度 ) か ら +19
(低 優 先 度 ) の 範
囲 の 数 値 で あ
る 。 setpriority(2) を 参
照 。
sched_priority こ の フ ィ
ー ル ド は 、
sched_policy に SCHED_FIFO か
SCHED_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.size に sched_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 |
size と attr で 指 定 さ れ た バ ッ フ ァ ー が 小 さ す ぎ る 。 | ||
EINVAL |
size が 無 効 で あ る 。 つ ま り 、 最 初 の バ ー ジ ョ ン の sched_attr 構 造 体 (48 バ イ ト ) よ り も 小 さ い か 、 シ ス テ ム の ペ ー ジ サ イ ズ よ り も 大 き い 。 |
さ ら に 、 sched_setattr() は 以 下 の 理 由 で も 失 敗 す る 。
E2BIG |
size と attr で 指 定 さ れ た バ ッ フ ァ ー が カ ー ネ ル 構 造 体 よ り も 大 き く 、 一 つ 以 上 の 超 過 バ イ ト が 0 で な か っ た 。 | ||
EBUSY |
SCHED_DEADLINE の 流 入 制 御 の 失 敗 に つ い て は sched(7) を 参 照 。 | ||
EINVAL |
attr.sched_policy が 認 識 で き る ポ リ シ ー で は な い 。 attr.sched_flags に SCHED_FLAG_RESET_ON_FORK 以 外 の フ ラ グ が 含 ま れ て い る 。 attr.sched_priority が 無 効 で あ る 。 attr.sched_policy が SCHED_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/ に 書 か れ て い る 。