EBSスナップショットをボリューム化した直後はEBSボリュームの本来のディスクIO性能(IOPS/スループット)を発揮することができないです。
これはAWSの仕様であり、ファーストタッチペナルティと言われています。
ファーストタッチペナルティ
ユーザ側からは見えないですがEBSスナップショットやAMIはS3上に存在します。
スナップショットからボリューム化した直後はディスク内のデータはまだS3に存在したままです。
OSから初めてにデータ(ディスク内のブロック)にアクセスした際にブロック単位でS3からディスクにコピーされるため、その分アクセス性能が落ちるという現象です。
※初回アクセスしない限り性能は落ちたままということです。(時間が解決してくれる訳ではない。)
回避方法
回避方法としては以下2つあります。
回避方法① 「ボリューム化直後のディスクに事前にOS上から全てのブロックに対してアクセスしておく」
⇒ボリューム化後に、実際にアプリ等がデータにアクセスする前にOSからディスク(ブロック)に対して予めアクセスしておく。
ボリューム化直後も本来のパフォーマンスを出したい場合には不向き。
回避方法② 「スナップショットの高速復元機能であるFSR(Fast Snapshot Restore)を使用してボリューム化する」
⇒スナップショット自体にFSRという高速復元の設定をした状態でボリューム化すると最初から本来のパフォーマンスを発揮できる。
サイズが大きいスナップショットだとFSR設定が完了するまでに時間が掛かる(約1TBで1時間)。
FSR設定が完了するまでボリューム化できないので早くディスクを使用したい場合には不向き。
回避方法①. ボリューム化直後のディスクに事前にOS上から全てのブロックに対してアクセスしておく
スナップショットから復元したボリュームの性能がIOPS3000、スループット125MB/sのディスクをEC2インスタンスにアタッチ/マウントします。

OS上から対象ディスクに対してfioを使ってアクセスします。(ddコマンドでもできます。)
# fio --filename=/dev/XXXX --rw=read --bs=128k --iodepth=32 --ioengine=libaio --direct=1 --name=volume-initialize
※XXXXはデバイス識別名。(windowsの場合は –filename=\\.\PHYSICALDRIVEとする)
volume-initialize: (g=0): rw=read, bs=(R) 128KiB-128KiB, (W) 128KiB-128KiB, (T) 128KiB-128KiB, ioengine=libaio, iodepth=10 fio-3.19 Starting 1 process ^Cbs: 1 (f=1): [R(1)][0.3%][r=32.2MiB/s][r=257 IOPS][eta 01h:51m:49s]
read性能としてスループット32MB/s、IOPS257しか出ていないことが分かります。
この処理が全て完了するまで待ちます。(完了後、すべてのブロックにアクセスしたことになります。)
回避方法②. スナップショットの高速復元機能であるFSR(Fast Snapshot Restore)を使用してボリューム化する
対象のスナップショットを選択した状態で「スナップショットの高速復元を管理」を選択。

AZを選択して「有効化」押下。

課金されるが有効化を選択。

しばらく経つと対象の高速スナプショット復元ステータスが有効となる。

この状態のスナプショットをボリューム化してEC2インスタンスにアタッチ/マウントする。
ディスクの性能を図るためにfioを実施してみます。
# fio --filename=/dev/XXXX --rw=read --b s=128k --iodepth=32 --ioengine=libaio --direct=1 --name=volume-initialize
ボリュームの性能がスループット125MB/s 、IOPS3000に対して、
実測値としてスループットが125MiB/s、IOPS1348と最初から性能値が高いことが確認できます。
volume-initialize: (g=0): rw=read, bs=(R) 128KiB-128KiB, (W) 128KiB-128KiB, (T) 128KiB-128KiB, ioengine=libaio, iodepth=10 fio-3.19 Starting 1 process Jobs: 1 (f=1): [R(1)][0.1%][r=125MiB/s][r=1348 IOPS][eta 10h:49m:08s]
使用後はFSRを無効化するのを忘れずに。
コメント