Upload
narimichi-takamura
View
17.576
Download
7
Embed Size (px)
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優先度変更できるよ