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

Preview:

Citation preview

【続編】その 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 スケジューラ

I/O

全部入りのFIFOキューがあるだけ

DEADLINE I/O スケジューラ

• ReadとWriteでキューが別

• Read 優先

• 期限(deadline)付きキューが特徴

• 期限が切れた要求は最優先で処理する

DEADLINE I/O スケジューラ

I/O

READ と WRITE のキューがあるだけ

CFQ I/O スケジューラ• プロセスごとにサブキューを用意

• 優先度を考慮してキューごとの処理時間を決定

• 1つのサブキューをアクティブキューとして、そのキュー内の要求を処理時間の範囲で処理する

• 処理時間が終わるとアクティブキューが切り替わる

CFQ I/O スケジューラプロセスごとにキューがある

I/O

…"

CFQ I/O スケジューラ

I/O

…"

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

低優先度プロセスのサブキューはアクティブになかなかならない && なってもすぐにスタンバイになる

特定のI/Oじゃないと効かない理由

ディスクキャッシュの効いたREAD

プロセス空間 ディスクキャッシュ 物理デバイス

ディスクキャッシュの データを返す

ディスクキャッシュのないREAD

プロセス空間 ディスクキャッシュ 物理デバイス

ディスクキャッシュのないREAD

プロセス空間 ディスクキャッシュ 物理デバイス

ディスクキャッシュ作成 ディスクキャッシュの データを返す

普通のWRITE(遅延 WRITE)プロセス空間 ディスクキャッシュ 物理デバイス

後で書き込み ディスクキャッシュに コピーをして終了

普通のWRITE(遅延 WRITE)プロセス空間 ディスクキャッシュ 物理デバイス

後で書き込み ディスクキャッシュに コピーをして終了

誰がやるの?

定期的にLINUX カーネルが書き込んでます。※だから IONICE が効かない

定期的な同期処理

特殊なフラグの立ったI/O

プロセス空間 ディスクキャッシュ 物理デバイス

キャッシュを経由せず 直接デバイスに読み書きする

質問コーナー

Recommended