ioniceを久々に利用したので忘れないようにメモ。
背景
EBSボリューム拡張(2.5TB→3.0TB)のため、スナップショットから作成し、EC2にアタッチ。
EBSはスナップショットから復元した場合、下記リンクの通りボリュームの初期化が必要。
※EBSのオンライン拡張の機能が可能だが、+500GBと比較的大容量を拡張するため、拡張時間が膨大になりそう+IOに影響があるとのことで、メンテナンス時間を確保し従来の方法を採択
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-initialize.html
対象領域がおよそ3TBと大容量で、普通にpre-warmingを以下の
ddコマンドで実行するととてつもない時間がかかる。(1時間弱で25GB程度しか読み込みできず)
$ sudo dd if=/dev/xvdc of=/dev/null bs=1M
※拡張したデバイスは/dev/xvdc
本番環境で作業可能な時間も限られているため、
動かしながらionice / niceで少しずつ処理をさせることを検討。
実施したコマンド
$ sudo ionice -c 3 nice -n 19 dd if=/dev/xvdc of=/dev/null bs=1M
ioniceについては以下引用ページに十分な説明があるのでコマンドオプションなどはこちらを参照。
http://www.atmarkit.co.jp/ait/articles/1708/18/news018.html
補足
ioniceコマンドは実はIOスケジューラcfqしか効かないようなので注意。
そのioniceほんとに効いていますか?
https://www.slideshare.net/narimichitakamura/ionice
実行中プロセスのioniceを確認するコマンド
$ sudo ionice -p {プロセスID}
nice値の確認
"ps -l"コマンドを利用、"NI"列を参照。
$ ps -ewfly
S UID PID PPID C PRI NI RSS SZ WCHAN STIME TTY TIME CM
(略)
D root 35195 1 0 99 19 1664 26757 sync_p 13:01 ? 00:00:36 dd if=/dev/xvdc of=/dev/null bs=1M