前述

EBSボリュームをスナップショットから作成する際、ボリュームのパフォーマンスが50%以上低下する可能性があるといわれています。
この事象を一般的に「ファーストタッチレイテンシー」或いは「ファーストタッチペナルティー」と呼ばれているようです

調査

AWS公式ドキュメントを調べて下記がありました。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-initialize.html

スナップショットから作成されたボリュームの場合、アクセスする前に、ストレージブロックが Amazon S3 からプルダウンされてボリュームに書き込こまれる必要があります。この事前処理には一定の時間がかかるため、各ブロックへの初回アクセス時には、I/O 操作のレイテンシーが著しく増加する可能性があります。ボリュームのパフォーマンスは、すべてのブロックがダウンロードされてボリュームに書き込まれると正常値に達します。

↑言い換えると、EBSを新規作成し、スナップショット上のデータはボリューム上にあるかのように見えるが、実際、まだS3に置いたままの状態になっている。
初めて利用しようとした瞬間、S3からのダウンロードが始まり、ダウンロード完了を待たねばならないということです。
恐らく、リストアの時間短縮及びリソース(内部ネットワーク転送帯域など)節約のためかもっと思っています。

対策

  1. 我慢:パフォーマンスが下がるとは言え、IOが止まるわけではないことから、性能要件がそこまで厳しくないシステムや環境においては、特に対策をしなくてもよい可能性が大きい。

  2. 初期化:リストア後にボリュームのすべてのブロックを読み込むことによる初期化を行う。

    デバイスのすべてのブロックを読み取るには、dd ユーティリティまたは fio ユーティリティを使用します。Linux システムにデフォルトでインストールされているのは dd コマンドですが、マルチスレッドの読み取りが可能な fio の方が、処理速度が大幅に速くなります。

  3. 「高速スナップショット復元」機能を使用:有料ではあるが、有効にすることで、リストア後にすぐボリュームのフルパフォーマンスを発揮できるようです。
    2.に比べてボリュームの作りこみが不要になる分、リストア時の障害ポイントも減ることになるため、割と視野に入ることがあるかもしれません。
    料金:https://aws.amazon.com/jp/ebs/pricing/ (EBS Fast Snapshot Restore)
    ※ちなみに料金はスナップショット、AZ、時間単位で計算されているため、常時有効化にするのではなく、リストア時にのみ有効化し、リストア後に無効化するのがよいかもしれません。(有効化するために時間がTiBあたり60分かかるだそうです)

まとめ

スナップショットからEBSをリストアすると初回にアクセルするブロックの性能が低下します、DBや本番環境など、最初からボリュームの性能が必要な場合、対策を練る必要が出てきます。

+1
Last modified: 2021-05-27

Author