【続編】その IONICE 、 
ほんとに効いてますか? 株式会社ハートビーツ 
@nari_ex 
高村成道
おさらい 
ionice は以下の2条件を満たした時にちゃんと動く 
I/O Scheduler が CFQ 
特定のI/O処理 
キャッシュされていないファイルへのRead 
特殊フラグの立った Write
ん、なんで(・へ・)?
CFQ じゃないと効かない理由
VFS 
カーネル空間 
ユーザ空間 
システムコール 
物理 
デバイス 
ファイルシステム 
ディスクキャッシュ 
汎用ブロック層 
I/O スケジューラ 
物理 
デバイス 
プロセス 
I/O スケジューラ 
デバイス 
ドライバ 
デバイス 
ドライバ
I/O スケジューラ概要
I/O
I/O スケジューラの 
サブキューに注目
結論: 
CFQ 以外、優先度を考慮して 
実装されてない
代表的なI/Oスケジューラ 
• NOOP 
• DEADLINE 
• CFQ(Completely Fair Queuing)
NOOP I/O スケジューラ 
• 要求をディスパッチキューに突っ込むだけ 
• No Operation
NOOP I/O スケジューラ 
全部入りのFIFOキューがあるだけ
I/O
DEADLINE I/O スケジューラ 
• ReadとWriteでキューが別 
• Read 優先 
• 期限(deadline)付きキューが特徴 
• 期限が切れた要求は最優先で処理する
DEADLINE I/O スケジューラ 
READ と WRITE のキューがあるだけ
I/O
CFQ I/O スケジューラ 
• プロセスごとにサブキューを用意 
• 優先度を考慮してキューごとの処理時間を決定 
• 1つのサブキューをアクティブキューとして、その 
キュー内の要求を処理時間の範囲で処理する 
• 処理時間が終わるとアクティブキューが切り替わる
CFQ I/O スケジューラ 
プロセスごとにキューがある 

 

	 
I/O
…
CFQ I/O スケジューラ 

 

	 
I/O
アクティブになったキューにある 
要求が処理される 
 

 … 
低優先度プロセスのサブキューは 
アクティブになかなかならない  
なってもすぐにスタンバイになる
特定のI/Oじゃないと効かない理由
ディスクキャッシュの効いたREAD 
プロセス空間 ディスクキャッシュ 物理デバイス 
ディスクキャッシュの 
データを返す
ディスクキャッシュのないREAD 
プロセス空間 ディスクキャッシュ 物理デバイス
ディスクキャッシュのないREAD 
プロセス空間 ディスクキャッシュ 物理デバイス 
ディスクキャッシュの ディスクキャッシュ作成 
データを返す
普通のWRITE(遅延 WRITE) 
プロセス空間 ディスクキャッシュ 物理デバイス 
ディスクキャッシュに 後で書き込み 
コピーをして終了

【続編】その ionice、ほんとに効いてますか?