Amazon Elastic File System

Amazon EFS でバースト性能を確保したままスループットを拡張する

Amazon EFS でバースト性能を確保したままスループットを拡張する

こんにちは。SRE課の栩野です。

今回のネタはAmazon EFSのスループットについてです。

先日バーストモードで利用しているEFSで、バーストクレジット(BurstCreditBalance)が枯渇し
パフォーマンスが低下するといったことがあり

対策として、スループットモードをプロビジョニングモードに変更し、必要なスループットを確保
するよう対応したのですが

スループットモードをプロビジョニングモードに変更したことで、バースト性能が使えなくなり
一時的なアクセス増加等に確保したスループットでは対応出来ず、バースト性能が欲しいなー
といったことがありました。

色々調べたところ、スループットモードがバーストでも、EFSにダミーファイルを設置し
データ量に基づいてスループット性能を上昇させれば、バースト性能を確保しつつ、スループット
の拡張が可能なようでした。

そこでその際の対応方法と、そもそものスループットモードについての説明を以下記載していきます。

そもそもスループットモードとは

まず、そもそもスループットモードとはなんぞやについてですが

EFSのファイルシステムには選択出来るスループットモードが二種類あり
「バーストスループット」と「プロビジョンドスループット」があります。

EFSのスループット性能自体は、EFSで利用するデータ量が大きくなるにつれて上昇していきます。

バーストモード

バーストスループットモードでは、EFSへの読み書きの高低差が激しいような利用方法を行う際
利用されるスループットがベースラインと呼ばれるラインを下回る際はクレジットとして性能を蓄積
していき、上回る際はそのクレジットに蓄積した性能を利用しパフォーマンスを発揮するモードです。

バーストクレジットの蓄積量はCloudWatchの「BurstCreditBalance」メトリクスで確認出来ます。

デフォルトはバーストモードで、全てのEFSファイルシステムは100MiB/秒まで最初から
バーストすることが可能です。

スループットの性能はファイルシステムに保存しているデータ量に基づいて決定されるため
データ量が多ければパフォーマンスが高く、少なければパフォーマンスは低くなります。

スループットはデータ量1TiBあたり、50MiB/秒の性能が確保されます。(1GiBあたりは50KiB/秒)

プロビジョニングモード

プロビジョニングモードでは、確保したいスループットに対して、EFSのデータ量が少なく確保出来ない
場合、要求するスループットの数値を設定するだけで、高レベルなスループットを簡単に確保出来ます。

ただし、利用にはデータ量に対する課金とは別に、プロビジョニングされたスループット使用に対する
追加料金が発生します。

もしもEFSのデータ量が多く、プロビジョニングモードで設定したスループット性能よりも
データ量に基づいて確保出来されるスループット性能の方が高い場合は、バーストスループットモード
として扱われ、スループット使用に対する追加料金は発生しません。

より細かい情報については、以下AWSのドキュメントを参照してください。
Amazon EFS パフォーマンス

また図や動画での説明は是非EFSのBlack Beltを参照してください。
Amazon EFS Black Belt資料

料金の比較

それぞれ、5MiB/秒のスループットを確保する場合に発生する料金を比較してみます。
(標準ストレージで利用した場合)

  • バーストモード
    データ量1GiBあたり、50KiB/秒の性能のため、5MiB/秒は100GiBのデータ量が必要となります。

GiBをGBで考えると、約108GBのデータ量が必要となるため
利用料は、「38.88USD」となります。

  • プロビジョニングモード
    プロビジョニングモードの場合は、必要なスループットの数値を入れるだけで設定が可能です。

5MiB/秒を設定した際の利用料は、「36.00USD」となり、スループットとは別に
利用するデータ量に関する費用も発生してきます。

料金については、同様のスループット性能を求める場合はそこまで大差はない形でした。

料金は以下AWSの料金ページを参考にしています。
Amazon EFS の料金

バーストモードでのスループット拡張方法

それでは本題の、バースト性能を確保したままスループットを拡張する方法の
対応手順についてを説明していきます。

スループットモードはバーストを利用し、ダミーファイルを設置してデータ量を
増やすことで、5MiB/秒のスループット性能を確保するといった方法になります。

こうすることで、バーストモードの性能を確保しつつ、スループットも拡張することが可能です。

ダミーファイルを設置する際ですが、バーストモードで実施した場合は
バーストクレジットを多く消費してしまう可能性があります。

そのため、一時的にプロビジョニングモードに切り替えてからダミーファイルを設置し
設置後にバーストモードに戻す方法を推奨します。

スループットモードの切り替えは、以下EFSのサービスページから対象のEFSを選択し

右上にある編集をクリックします。

プロビジョニングに変更する際は「プロビジョニング済み」を選択し
必要なスループットの(MiB/秒)の数値を入力し変更を保存します。
※一日に変更できる回数に制限があるので、複数回変更する場合は注意が必要です。

前提条件

Amazon Linux2等のOSを使ったEC2に対して、既にEFSがマウントされており
SSHでサーバにログインができる前提となります。

ダミーファイル作成領域の作成

対象サーバにSSHでログインし、EFS領域にダミーファイル設置ディレクトリを作成します。
(今回は「/efs_disk」にEFSをマウントしてる前提)

$ mkdir /efs_disk/dummy

ダミーファイルの設置

ダミーファイルを設置していきますが、その際に一つの巨大なダミーファイルにしてしまった場合
後からデータ量によるスループットの微調整することが難しくなるため
10GB毎などの容量で、ダミーファイルを複数に分けて設置する方法を推奨します。

5MiB/秒を確保するためには、約108GBのデータ量、正確にはGiBなので
10741MBのダミーファイルを10個作成します。

ダミーファイルの設置は以下のスクリプトで実施します。

vim create_dummy.sh

引数として10GBのファイルをいくつ作成するか受け取るようにしています。

#!/usr/bin/bash

i=1
DAY=`date +%Y%m%d`

while [ $i -le $1 ]
do
  dd if=/dev/zero of=/var/www/vhosts/dummy/$DAY-10GB-$i-dummy bs=1M count=10741
  i=$(( i + 1 ))
done
// 実行権限付与
$ chmod 755 create_dummy.sh

// 実行 10個作成するので、引数は10
$ ./create_dummy.sh 10

実行後はdfコマンド等で、実際にEFS領域の使用率が増えているか確認してください。

あとがき

EFSのスループット周りをあまり理解していない状態だったので
今回の対応でかなり勉強になりました。

他にもEFSのスループットモードで悩んでる方がいれば
少しでも参考にしていただければと思います!

以上、ありがとうございました。

参考サイト

Amazon EFS パフォーマンス
Amazon EFS Black Belt資料
Amazon EFS の料金

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA