その ionice、ほんとに効いてますか?

Preview:

DESCRIPTION

ionice に関するスライド。続編 → http://www.slideshare.net/narimichitakamura/ionice2

Citation preview

その IONICE, ほんとに効いてますか?

TAKAMURA Narimichi@nari_ex

hbstyle-2014-08-14

WHAT IS IONICE ?

• I/O の処理優先度を指定するLinuxコマンド

• nice コマンドの I/O バージョン

• nice コマンドでは I/O 優先度を制御不可

I/O 優先度クラス• RT ( Real-time )

• 最高優先度

• BE ( Best-Effort )

• デフォルト優先度

• Idle

• 最低優先度

BE: クラス内優先度• BE クラスのみ、クラス内優先度がある

• 優先度は 0~7 までの 8段階

• 0が最高優先度、7が最低優先度

• 優先度はクラスの枠を超えない

• RT > BE (0)

• IDLE < BE (7)

BE: クラス内優先度• BE クラスのみ、クラス内優先度がある

• 優先度は 0~7 までの 8段階

• 0が最高優先度、7が最低優先度

• 優先度はクラスの枠を超えない

• RT < BE (0)

• IDLE < BE (7)

HOW TO IONICE

• RT クラスを指定: ionice -c1

• BE クラスを指定: ionice -c2 -n <0~7>

• IDLE クラスを指定: ionice -c3

余談: NICE コマンド

• クラスはない

• 優先度 ( nice値 ) は -20~19

• -20 が最高優先度、19が最低優先度

負荷を最小限に抑えたい!

ionice, nice を駆使して…

# ionice -c3 nice -n19

これで完璧だ!!!

–Johnny Appleseed

ちょっとまって

その IONICE, ほんとに効いてますか?

–Johnny Appleseed

IONICE が効く条件• I/O スケジューラ

• Readなの?Writeなの?フラグは?

• ファイル作成フラグ

• キャッシュの有無

I/O Scheduler…

–Johnny Appleseed

“ここに引用を入力してください。”VFS

カーネル空間

システムコール

ユーザ空間

物理 デバイス

ファイルシステム

ディスクキャッシュ

汎用ブロック層

物理 デバイス

プロセス

I/O スケジューラ層

デバイスドライバ

デバイスドライバ

条件その1: I/O SCHEDULER(1)

• CFQ スケジューラ以外は無理

• Linux 標準のスケジューラは CFQ

• Amazon Linux は Noop なので注意

• Unbreakable Linux は Deadline なので注意

条件その1: I/O SCHEDULER(2)

• デバイスひとつにI/Oスケジューラひとつ

• デバイスをまたぐ処理の場合に注意

• 処理に関わるすべてのデバイスを確認せよ

• # cat /sys/block/<DEV_NAME>/queue/scheduler

条件その2: I/O処理の内容(1)

• Write() は基本的に効かない

• O_DIRECT, O_SYNC をフラグ立ててればOK

• -o sync でマウントされたファイルシステムならOK

条件その2: I/O処理の内容(2)

• Read() もすべてに効くわけではない

• ディスクキャッシュがあるとダメ

• ディスクアクセスないから当然

まとめ• ionice は以下の 2条件を満たした時にちゃんと動く

• I/O Scheduler が CFQ

• 特定のI/O処理

• キャッシュされていないファイルへのRead

• 特殊フラグの立った Write

さいごに• man ioprio_set を読もう

• ファイル作成フラグの細かいことはまた今度

• O_SYNC, O_DSYNC, O_FSYNC…

• ionice -p <PID> を使うと、起動中のプロセスのI/O優先度変更できるよ

Recommended