24
その IONICE, ほんとに効いてますか? TAKAMURA Narimichi @nari_ex hbstyle-2014-08-14

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

TAKAMURA Narimichi@nari_ex

hbstyle-2014-08-14

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

WHAT IS IONICE ?

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

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

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

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

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

• 最高優先度

• BE ( Best-Effort )

• デフォルト優先度

• Idle

• 最低優先度

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

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

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

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

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

• RT > BE (0)

• IDLE < BE (7)

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

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

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

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

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

• RT < BE (0)

• IDLE < BE (7)

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

HOW TO IONICE

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

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

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

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

余談: NICE コマンド

• クラスはない

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

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

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

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

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

ionice, nice を駆使して…

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

# ionice -c3 nice -n19

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

これで完璧だ!!!

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

–Johnny Appleseed

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

ちょっとまって

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

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

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

–Johnny Appleseed

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

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

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

• ファイル作成フラグ

• キャッシュの有無

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

I/O Scheduler…

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

–Johnny Appleseed

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

カーネル空間

システムコール

ユーザ空間

物理 デバイス

ファイルシステム

ディスクキャッシュ

汎用ブロック層

物理 デバイス

プロセス

I/O スケジューラ層

デバイスドライバ

デバイスドライバ

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

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

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

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

• Amazon Linux は Noop なので注意

• Unbreakable Linux は Deadline なので注意

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

• I/O Scheduler が CFQ

• 特定のI/O処理

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

• 特殊フラグの立った Write

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

さいごに• man ioprio_set を読もう

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

• O_SYNC, O_DSYNC, O_FSYNC…

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