Manpages

名 前

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/ に 書 か れ て い る 。