Manpages

名 前

ioprio_get, ioprio_set − I/O ス ケ ジ ュ ー リ ン グ ク ラ ス と 優 先 度 の 設 定 /取 得

書 式

int ioprio_get(int which, int who);
int ioprio_set(int
which, int who, int ioprio); 注 意 : こ れ ら の シ ス テ ム コ ー ル に は glibc ラ ッ パ ー 関 数 は 存 在 し な い 。 「 注 意 」 の 節 を 参 照 。

説 明

シ ス テ ム コ ー ル ioprio_get() / ioprio_set() は 、 (1つ 以 上 の ) ス レ ッ ド の I/O ス ケ ジ ュ ー リ ン グ ク ラ ス と 優 先 度 の 取 得 /設 定 を 行 う 。

whichwho 引 き 数 で シ ス テ ム コ ー ル の 操 作 対 象 と な る ス レ ッ ド を 指 示 す る 。 which 引 き 数 は 、 who を ど の よ う に 解 釈 す る か を 決 め る も の で 、 以 下 の い ず れ か 一 つ を 指 定 す る 。
IOPRIO_WHO_PROCESS

who は 特 定 の プ ロ セ ス や ス レ ッ ド を 特 定 す る た め の プ ロ セ ス ID か ス レ ッ ド ID で あ る 。 who が 0 の 場 合 、 呼 び 出 し 元 の ス レ ッ ド に 対 し て 操 作 が 行 わ れ る 。

IOPRIO_WHO_PGRP

who は プ ロ セ ス グ ル ー プ ID で あ り 、 プ ロ セ ス グ ル ー プ の 全 メ ン バ が 対 象 と な る 。 who が 0 の 場 合 、 呼 び 出 し 元 が メ ン バ ー と な っ て い る プ ロ セ ス グ ル ー プ に 対 し て 操 作 が 行 わ れ る 。

IOPRIO_WHO_USER

who は ユ ー ザ ー ID で あ り 、 実 UID に 一 致 す る 全 プ ロ セ ス が 対 象 と な る 。

ioprio_get() の 呼 び 出 し 時 に whichIOPRIO_WHO_PGRPIOPRIO_WHO_USER が 指 定 さ れ 、 who に 一 致 す る プ ロ セ ス が 複 数 あ っ た 場 合 、 一 致 す る プ ロ セ ス 全 体 の 中 で 最 も 高 い 優 先 度 が 返 さ れ る 。 優 先 度 が 高 い と は 、 よ り 高 い 優 先 度 ク ラ ス に 属 し て い る (IOPRIO_CLASS_RT が 最 も 高 い 優 先 度 ク ラ ス で 、 IOPRIO_CLASS_IDLE が 最 も 低 い )、 も し く は 同 じ 優 先 度 ク ラ ス に 属 し て い る が 優 先 度 レ ベ ル が 高 い (優 先 度 番 号 が 小 さ い 方 が 優 先 度 レ ベ ル が 高 い こ と を 意 味 す る )、 と い う こ と で あ る 。

ioprio_set() に 渡 す ioprio 引 き 数 は 、 対 象 と な る プ ロ セ ス に 割 り 当 て る ス ケ ジ ュ ー リ ン グ ク ラ ス と 優 先 度 の 両 方 を 指 定 す る ビ ッ ト マ ス ク で あ る 。 ioprio の 値 を 組 み 立 て た り 解 釈 す る の に 、 以 下 の マ ク ロ が 利 用 で き る 。
IOPRIO_PRIO_VALUE(
class, data) ス ケ ジ ュ ー リ ン グ ク ラ ス class と 優 先 度 (data) を 与 え る と 、 こ の マ ク ロ は 2つ の 値 を 組 み 合 わ せ て 、 ioprio 値 を 生 成 し 、 マ ク ロ の 結 果 と し て 返 す 。
IOPRIO_PRIO_CLASS(
mask)

mask (ioprio 値 ) を 与 え る と 、 こ の マ ク ロ は I/O ク ラ ス 要 素 、 つ ま り IOPRIO_CLASS_RT, IOPRIO_CLASS_BE, IOPRIO_CLASS_IDLE の い ず れ か 一 つ の 値 を 返 す 。

IOPRIO_PRIO_DATA(mask)

mask (ioprio 値 ) を 与 え る と 、 こ の マ ク ロ は 優 先 度 (data) 要 素 を 返 す 。 ス ケ ジ ュ ー リ ン グ ク ラ ス と 優 先 度 に 関 す る 詳 し い 情 報 は 、 「 備 考 」 の 節 を 参 照 の こ と 。

I/O 優 先 度 は 読 み 出 し と 同 期 書 き 込 み (O_DIRECT, O_SYNC) に 対 応 し て い る 。 I/O 優 先 度 は 非 同 期 書 き 込 み に は 対 応 し て い な い 。 な ぜ な ら 、 非 同 期 書 き 込 み は メ モ リ ー 書 き 換 え を 行 う プ ロ グ ラ ム の 動 作 (context) と は 関 係 な く 発 行 さ れ 、 そ の た め プ ロ グ ラ ム 単 位 の 優 先 度 は 適 用 さ れ な い か ら で あ る 。

返 り 値

成 功 す る と 、 ioprio_get() は 、 whichwho で 指 定 さ れ た 基 準 に 合 致 し た 全 プ ロ セ ス で 最 も 高 い I/O 優 先 度 を 持 つ プ ロ セ ス の ioprio 値 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。 成 功 す る と 、 ioprio_set() は 0 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。

エ ラ ー

EINVAL

whichioprio の 値 が 不 正 で あ る 。 ioprio 用 に 指 定 可 能 な ス ケ ジ ュ ー ラ ク ラ ス と 優 先 度 レ ベ ル に つ い て は 「 備 考 」 を 参 照 の こ と 。

EPERM

呼 び 出 し 元 プ ロ セ ス が 、 指 定 さ れ た プ ロ セ ス に ioprio を 割 り 当 て る の に 必 要 な 権 限 を 持 っ て い な い 。 ioprio_set() に 必 要 な 権 限 に つ い て の 詳 し い 情 報 は 「 備 考 」 の 節 を 参 照 の こ と 。
ESRCH

whichwho で 指 定 さ れ た 基 準 に 合 致 す る プ ロ セ ス が 見 つ か ら な か っ た 。

バ ー ジ ョ ン

こ れ ら の シ ス テ ム コ ー ル は カ ー ネ ル 2.6.13 以 降 の Linux で 利 用 可 能 で あ る 。

準 拠

こ れ ら の シ ス テ ム コ ー ル は Linux 独 自 で あ る 。

注 意

glibc は こ れ ら の シ ス テ ム コ ー ル に 対 す る ラ ッ パ ー 関 数 を 提 供 し て い な い 。 syscall(2) を 使 っ て 呼 び 出 す こ と 。 複 数 の プ ロ セ ス や ス レ ッ ド が 一 つ の I/O コ ン テ キ ス ト を 共 有 す る 場 合 が あ る 。 clone(2)CLONE_IO フ ラ グ 付 き で 呼 び 出 し た 場 合 に は こ の 状 況 と な る 。 し か し な が ら 、 デ フ ォ ル ト で は 、 一 つ の プ ロ セ ス の 個 々 の ス レ ッ ド は I/O コ ン テ キ ス ト を 共 有 「 し な い 」 。 し た が っ て 、 プ ロ セ ス 内 の す べ て の ス レ ッ ド の I/O 優 先 度 を 変 更 し た い 場 合 に は 、 そ れ ぞ れ の ス レ ッ ド に 対 し て ioprio_set() を 呼 び 出 す 必 要 が あ る 。 こ の 操 作 を 行 う の に 必 要 と な る ス レ ッ ド ID に は gettid(2)clone(2) が 返 す 値 を 指 定 す る 。 こ れ ら の シ ス テ ム コ ー ル は 、 I/O 優 先 度 に 対 応 し た I/O ス ケ ジ ュ ー ラ と 組 み 合 わ せ て 使 用 さ れ た 場 合 に の み 効 果 を 持 つ 。 カ ー ネ ル 2.6.17 で は 、 こ の 条 件 を 満 た す ス ケ ジ ュ ー ラ は Completely Fair Queuing (CFQ) I/O ス ケ ジ ュ ー ラ だ け で あ る 。

I/O ス ケ ジ ュ ー ラ の 選 択
I/O ス ケ ジ ュ ー ラ の 選 択 は デ バ イ ス 単 位 に 行 わ れ 、 そ の 選 択 は ス ペ シ ャ ル フ ァ イ ル /sys/block/<device>/queue/scheduler 経 由 で 行 わ れ る 。 現 在 の I/O ス ケ ジ ュ ー ラ は /sys フ ァ イ ル シ ス テ ム 経 由 で 参 照 で き る 。 例 え ば 、 以 下 の コ マ ン ド を 実 行 す る と 、 現 在 カ ー ネ ル で ロ ー ド さ れ て い る ス ケ ジ ュ ー ラ の 全 リ ス ト が 表 示 さ れ る 。

$ cat /sys/block/hda/queue/scheduler
noop anticipatory deadline [cfq] 括 弧 で 囲 ま れ た ス ケ ジ ュ ー ラ が そ の デ バ イ ス (上 の 例 で は hda) に つ い て 実 際 に 使 用 さ れ て い る ス ケ ジ ュ ー ラ で あ る 。 別 の ス ケ ジ ュ ー ラ を 設 定 す る に は 、 こ の フ ァ イ ル に 新 し い ス ケ ジ ュ ー ラ 名 を 書 き 込 め ば よ い 。 例 え ば 、 以 下 の コ マ ン ド を 実 行 す る と 、 デ バ イ ス hda の ス ケ ジ ュ ー ラ と し て cfq が 設 定 さ れ る 。

$ su
Password:
# echo cfq > /sys/block/hda/queue/scheduler

Completely Fair Queuing (CFQ) I/O ス ケ ジ ュ ー ラ バ ー ジ ョ ン 3 (別 名 CFQ Time Sliced) 以 降 、 CPU ス ケ ジ ュ ー リ ン グ と 同 様 の I/O nice レ ベ ル が CFQ に 実 装 さ れ て い る 。 こ れ ら の nice レ ベ ル は 3つ の ス ケ ジ ュ ー リ ン グ ク ラ ス に 分 類 で き 、 各 ス ケ ジ ュ ー リ ン グ ク ラ ス に つ き 1つ 以 上 の 優 先 度 レ ベ ル が 定 義 さ れ て い る 。
IOPRIO_CLASS_RT
(1) こ れ は リ ア ル タ イ ム I/O ク ラ ス で あ る 。 こ の ス ケ ジ ュ ー リ ン グ ク ラ ス に は 他 の ク ラ ス よ り も 高 い 優 先 度 が 与 え ら れ る 。 こ の ク ラ ス の プ ロ セ ス に は 、 常 に デ ィ ス ク へ の ア ク セ ス が 優 先 し て 割 り 当 て ら れ る 。 そ の た め 、 こ の I/O ク ラ ス を 使 う 際 に は 、 た っ た 一 つ の リ ア ル タ イ ム I/O ク ラ ス の プ ロ セ ス に よ り シ ス テ ム 全 体 の デ ィ ス ク ア ク セ ス が で き な く な っ て し ま う こ と が あ る と い う 点 に 、 注 意 を 払 う 必 要 が あ る 。 こ の ク ラ ス に は 、 8 段 階 の class data (優 先 度 レ ベ ル ) が あ る 。 こ の 値 は 、 そ の プ ロ セ ス が 1回 の デ ィ ス ク ア ク セ ス に ど れ だ け の 時 間 が 必 要 か を 正 確 に 決 め る た め の も の で あ る 。 最 高 の リ ア ル タ イ ム 優 先 度 レ ベ ル は 0 で 、 最 低 は 7 で あ る 。 将 来 的 に は 、 優 先 度 レ ベ ル は 、 希 望 す る デ ー タ レ ー ト を 渡 す な ど 、 よ り 直 接 的 に 性 能 条 件 を 反 映 で き る よ う に 変 更 さ れ る か も し れ な い 。
IOPRIO_CLASS_BE
(2) こ れ は ベ ス ト エ フ ォ ー ト ス ケ ジ ュ ー リ ン グ ク ラ ス で あ る 。 こ の ク ラ ス は 、 特 定 の I/O 優 先 度 を 設 定 し て い な い プ ロ セ ス の デ フ ォ ル ト 値 で あ る 。 class data (優 先 度 レ ベ ル ) に よ り 、 そ の プ ロ セ ス が ど の 程 度 の I/O 帯 域 を 得 ら れ る か が 決 定 さ れ る 。 ベ ス ト エ フ ォ ー ト 優 先 度 レ ベ ル は 、 CPU の nice 値 (getpriority(2) 参 照 ) と 同 様 の も の で あ る 。 優 先 度 レ ベ ル は 、 ベ ス ト エ フ ォ ー ト ス ケ ジ ュ ー リ ン グ ク ラ ス の 中 で 他 の プ ロ セ ス と の 相 対 的 な 優 先 度 を 決 定 す る 。 優 先 度 レ ベ ル の 値 の 範 囲 は 0 (最 高 ) か ら 7 (最 低 ) で あ る 。
IOPRIO_CLASS_IDLE
(3) こ れ は idle ス ケ ジ ュ ー リ ン グ ク ラ ス で あ る 。 こ の レ ベ ル で 動 作 す る プ ロ セ ス は 他 に デ ィ ス ク ア ク セ ス を し よ う と す る プ ロ セ ス が な い 場 合 に の み I/O 時 間 を 取 得 す る 。 idle ク ラ ス に は class data (優 先 度 ) は 用 意 さ れ て い な い 。 プ ロ セ ス に こ の 優 先 度 を 割 り 当 て る 際 に は 注 意 が 必 要 で あ る 。 な ぜ な ら 、 優 先 度 の 高 い プ ロ セ ス が 常 に デ ィ ス ク に ア ク セ ス し て い る 場 合 に は デ ィ ス ク に ア ク セ ス で き な く な る 可 能 性 が あ る か ら だ 。

CFQ I/O ス ケ ジ ュ ー ラ の 更 な る 情 報 と サ ン プ ル プ ロ グ ラ ム に つ い て は Documentation/block/ioprio.txt を 参 照 の こ と 。

I/O 優 先 度 の 設 定 に 必 要 な 許 可 プ ロ セ ス の 優 先 度 を 変 更 す る 許 可 が 得 ら れ る か ど う か は 以 下 の 2つ の 条 件 に 基 い て 決 定 さ れ る 。 プ ロ セ ス の 所 有 権 非 特 権 プ ロ セ ス は 、 プ ロ セ ス の 実 UID が 呼 び 出 し 元 プ ロ セ ス の 実 UID も し く は 実 効 UID と 一 致 す る プ ロ セ ス の I/O 優 先 度 の み を 設 定 で き る 。 CAP_SYS_NICE ケ ー パ ビ リ テ ィ を 持 つ プ ロ セ ス は 、 ど の プ ロ セ ス の 優 先 度 で も 変 更 で き る 。 ど の 優 先 度 に 設 定 し よ う と し て い る か 非 常 に 高 い 優 先 度 (IOPRIO_CLASS_RT) を 設 定 し よ う と す る 場 合 、 CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ が 必 要 で あ る 。 カ ー ネ ル 2.6.24 以 前 で は 、 非 常 に 低 い 優 先 度 (IOPRIO_CLASS_IDLE) を 設 定 す る た め に も CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ が 必 要 で あ っ た が 、 Linux 2.6.25 以 降 で は も は や 必 要 な く な っ た 。

ioprio_set() は こ の 両 方 の ル ー ル に 従 い 、 条 件 を 満 た さ な い 場 合 、 エ ラ ー EPERM で 失 敗 す る 。

バ グ

glibc は 、 こ の ペ ー ジ に 記 載 さ れ た 関 数 プ ロ ト タ イ プ や マ ク ロ を 定 義 す る 適 切 な ヘ ッ ダ ー フ ァ イ ル を ま だ 提 供 し て い な い 。 必 要 な 定 義 に つ い て は linux/ioprio.h を 見 れ ば よ い 。

関 連 項 目

ionice(1), getpriority(2), open(2), capabilities(7)

Linux カ ー ネ ル ソ ー ス 内 の Documentation/block/ioprio.txt

こ の 文 書 に つ い て

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