#はじめに
最近下記の記事を書いたのですが、
ELB暖気運転(Pre-Warming)申請についていくつかサポートに問い合わせた
直後にEBSにもPre-Warmingという概念があるのを思い出したので、
勢いそのままについでに書くことにします。
#EBSのPre-Warmingとは
ざっくりいうと下記のとおりです。
- スナップショットからリストアした直後のEBSボリュームはIOがめっちゃ遅い
- どのくらい遅いかというと5%~50%分遅い
- 事前にコマンドによって読み込み処理を行えば上記を回避できる
- その処理をPre-Warmingという
付け加えると下記のとおり。
- 以前はスナップショットからのリストアだけでなく、新規ボリューム作成時にも遅かった
- 今は遅くないのでPre-Warmingはむしろやらないほうがいい
- Pre-Warmingというのは昔の呼称で、今は初期化(initialization)という
##きちんとドキュメントで読みたい
下記をご参照ください。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-initialize.html
新しい EBS ボリュームは、利用可能になるとすぐに最大のパフォーマンスを発揮し、初期化 (以前は事前ウォーミングと呼ばれました) を必要としません。ただし、スナップショットから復元されたボリュームのストレージブロックは、アクセスするためには事前に初期化する必要があります (Amazon S3 からプルダウンしてボリュームに書き込みます)。この準備処理には時間がかかるため、初めて各ブロックにアクセスした場合に、I/O 操作のレイテンシーの著しい増加が発生する可能性があります。ほとんどのアプリケーションにとって、ボリュームの存続期間全体でこのコストを割り当てることは、許容範囲内です。一度データにアクセスされると、パフォーマンスは元に戻ります。
ボリュームを使用する前に、そのボリュームのすべてのブロックを対象に、読み取りを実行することで、本番環境におけるパフォーマンスの低下を回避することができます。このプロセスを「初期化」と呼びます。スナップショットから作成された新しいボリュームの場合は、ボリュームを使用する前に、データのあるすべてのブロックを読み取る必要があります。
#Pre-Warmingに使うコマンド
##Linuxの場合
###dd
$ sudo dd if=/dev/xvdf of=/dev/null bs=1M
###fio
$ sudo fio --filename=/dev/xvdf --rw=randread --bs=128k --iodepth=32 --ioengine=libaio --direct=1 --name=volume-initialize
##Windowsの場合
###dd
C:\>dd if=\\.\PHYSICALDRIVEn of=/dev/null bs=1M --progress --size
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ebs-initialize.html
#あと少し気になった箇所
スナップショットから復元された io1 ボリュームを初期化している間は、ボリュームのパフォーマンスが想定レベルの 50% を下回る場合があります。このため、ボリュームの [I/O Performance] ステータスチェックでは warning 状態が表示されます。これは想定の動作です。初期化中の io1 ボリュームの warning 状態は無視してかまいません。
io1とはつまり「プロビジョンド IOPS SSD」のことですが、
なぜio1だけ言及されているのか、他のボリュームタイプでは無視してはいけないのか?
というのが気になります。(詳細未確認)
#おわりに
スナップショットとしてS3に保管されているデータ。
それらはリストア後のEBSボリュームの、
各ストレージブロックに初回アクセスが合った際に「プルダウン」されてくる。
「プルダウン」には少し時間がかかるので、
ボリューム全体まとめて一気に「プルダウン」しておきましょう、
というのがPre-Warming(初期化)のイメージでしょうか。
「初期化」と聞くと「え、全部データ消えちゃうの」と一瞬思いましたが、
そんなことはありませんでした。
dd ユーティリティまたは fio ユーティリティを使用します。ボリュームのすべてのデータが保持されます。
あと、あまり積極的にはやらなくてもいいよ、
というニュアンスを感じました。
実運用時は事前ウォーミングが不可能なケースもあるため、運用要件から判断して実行可能であれば取り込む程度でOK
とはいえ本番環境に適用する前には、
こういった注意事項があると頭の片隅に置いておいたほうが良さそうですね。
以上です。