その ionice、ほんとに効いてますか?
DESCRIPTION
ionice に関するスライド。続編 → http://www.slideshare.net/narimichitakamura/ionice2TRANSCRIPT
![Page 1: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/1.jpg)
その IONICE, ほんとに効いてますか?
TAKAMURA Narimichi@nari_ex
hbstyle-2014-08-14
![Page 2: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/2.jpg)
WHAT IS IONICE ?
• I/O の処理優先度を指定するLinuxコマンド
• nice コマンドの I/O バージョン
• nice コマンドでは I/O 優先度を制御不可
![Page 3: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/3.jpg)
I/O 優先度クラス• RT ( Real-time )
• 最高優先度
• BE ( Best-Effort )
• デフォルト優先度
• Idle
• 最低優先度
![Page 4: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/4.jpg)
BE: クラス内優先度• BE クラスのみ、クラス内優先度がある
• 優先度は 0~7 までの 8段階
• 0が最高優先度、7が最低優先度
• 優先度はクラスの枠を超えない
• RT > BE (0)
• IDLE < BE (7)
![Page 5: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/5.jpg)
BE: クラス内優先度• BE クラスのみ、クラス内優先度がある
• 優先度は 0~7 までの 8段階
• 0が最高優先度、7が最低優先度
• 優先度はクラスの枠を超えない
• RT < BE (0)
• IDLE < BE (7)
![Page 6: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/6.jpg)
HOW TO IONICE
• RT クラスを指定: ionice -c1
• BE クラスを指定: ionice -c2 -n <0~7>
• IDLE クラスを指定: ionice -c3
![Page 7: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/7.jpg)
余談: NICE コマンド
• クラスはない
• 優先度 ( nice値 ) は -20~19
• -20 が最高優先度、19が最低優先度
![Page 8: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/8.jpg)
負荷を最小限に抑えたい!
![Page 9: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/9.jpg)
ionice, nice を駆使して…
![Page 10: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/10.jpg)
# ionice -c3 nice -n19
![Page 11: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/11.jpg)
これで完璧だ!!!
![Page 12: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/12.jpg)
–Johnny Appleseed
![Page 13: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/13.jpg)
ちょっとまって
![Page 14: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/14.jpg)
その IONICE, ほんとに効いてますか?
![Page 15: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/15.jpg)
–Johnny Appleseed
![Page 16: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/16.jpg)
IONICE が効く条件• I/O スケジューラ
• Readなの?Writeなの?フラグは?
• ファイル作成フラグ
• キャッシュの有無
![Page 17: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/17.jpg)
I/O Scheduler…
![Page 18: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/18.jpg)
–Johnny Appleseed
“ここに引用を入力してください。”VFS
カーネル空間
システムコール
ユーザ空間
物理 デバイス
ファイルシステム
ディスクキャッシュ
汎用ブロック層
物理 デバイス
プロセス
I/O スケジューラ層
デバイスドライバ
デバイスドライバ
![Page 19: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/19.jpg)
条件その1: I/O SCHEDULER(1)
• CFQ スケジューラ以外は無理
• Linux 標準のスケジューラは CFQ
• Amazon Linux は Noop なので注意
• Unbreakable Linux は Deadline なので注意
![Page 20: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/20.jpg)
条件その1: I/O SCHEDULER(2)
• デバイスひとつにI/Oスケジューラひとつ
• デバイスをまたぐ処理の場合に注意
• 処理に関わるすべてのデバイスを確認せよ
• # cat /sys/block/<DEV_NAME>/queue/scheduler
![Page 21: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/21.jpg)
条件その2: I/O処理の内容(1)
• Write() は基本的に効かない
• O_DIRECT, O_SYNC をフラグ立ててればOK
• -o sync でマウントされたファイルシステムならOK
![Page 22: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/22.jpg)
条件その2: I/O処理の内容(2)
• Read() もすべてに効くわけではない
• ディスクキャッシュがあるとダメ
• ディスクアクセスないから当然
![Page 23: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/23.jpg)
まとめ• ionice は以下の 2条件を満たした時にちゃんと動く
• I/O Scheduler が CFQ
• 特定のI/O処理
• キャッシュされていないファイルへのRead
• 特殊フラグの立った Write
![Page 24: その ionice、ほんとに効いてますか?](https://reader031.vdocuments.site/reader031/viewer/2022012310/556153c2d8b42aa20d8b5130/html5/thumbnails/24.jpg)
さいごに• man ioprio_set を読もう
• ファイル作成フラグの細かいことはまた今度
• O_SYNC, O_DSYNC, O_FSYNC…
• ionice -p <PID> を使うと、起動中のプロセスのI/O優先度変更できるよ