Amazon EFS のパフォーマンスが不足している時の対処法について

2023.02.27

困っていること

Amazon EFS を利用していますが、想定よりパフォーマンスが不足していると見受けられます。 少しでもパフォーマスを上げるために、確認する点や対処法を教えてください。

どう対応すればいいの?

Amazon EFS は、Linux ワークロードに NFS で共有するファイルシステムストレージを提供するフルマネージドサービスです。

上記を踏まえ以下の確認後、各種対処およびご検討ください。

  • パフォーマンスモード
  • スループットモード
  • 利用する EC2 インスタンス環境
  • リクエストモデル
  • 他の検討事項

パフォーマンスモード

Amazon EFS には、汎用モード最大 I/O モード2 つのパフォーマンスモード があります。

汎用モードは最大 35,000 IOPS をサポートし、1 回の操作あたりのレイテンシが最も低く、ファイルシステムに推奨されるパフォーマンスモードです。EFS One Zone ストレージクラスを含むファイルシステムは、常に汎用パフォーマンスモードを使用します。EFS Standard ストレージクラスを持つファイルシステムでは、デフォルトの汎用パフォーマンスモードまたは最大 I/O パフォーマンスモードのいずれかを使用できます。

最大I/Oモードは、汎用モードよりも高いレイテンシーを許容できる、高度に並列化されたワークロード向けに設計されています。EFS One Zone ストレージクラスを使用するファイルシステムや Elastic スループットモードを使用するファイルシステムでは、最大 I/O モードはサポートされていません。

AWS では大部分のアプリケーションにおいて、汎用パフォーマンスモードを使用することをお勧めしていますが、CloudWatch の"PercentIOLimit"メトリックを監視することで、最大I/Oモードに変更するべきかどうかの判断が可能です。
"PercentIOLimit"メトリックが 100% に抵触していれば、最大I/Oモードへの変更をご検討ください。

スループットモード

Amazon EFS は、バーストエラスティックプロビジョニングの 3 つのスループットモードを提供しています。
ワークロードのパフォーマンス要件によって異なるため、現時点でご利用中のスループットモードではパフォーマンスを満たせない場合には、ファイルシステムに適した スループットモード の再選択をご検討ください。

  • Bursting Throughput
    ファイルシステムの使用量に応じてスループットのベースラインが決まり、 現在のスループットがベースラインより低い場合は、クレジットが蓄積され、ベースラインよりも高ければクレジットが消費されます。 蓄積されたバーストクレジットにより、ベースラインを上回るスループットを駆動できます。
    なお、使用容量に関係なく、すべてのファイルシステムは、100MiB/秒のスループットまでバーストすることが可能です。

    デフォルトのバーストスループットモードでは、ファイルシステムの EFS Standard ストレージのデータ量に合わせてスループットが調整されます。

  • Elastic Throughput
    パフォーマンス要件の予測が困難な輻輳するワークロードに最適であり、アプリケーションのニーズに合わせてスループット容量を指定したりプロビジョニングする必要はありません。 アプリケーションが必要とするスループット性能を自動的に提供します。

    エラスティックスループットモードでは、Amazon EFS はワークロードのパフォーマンスニーズに合わせてスループットをリアルタイムで自動的に増減します。

  • Provisioned Throughput
    ストレージへのスループット速度が高いアプリケーションや、バーストモードで許容されている以上の要件がある場合に使用します。

    プロビジョニングされたスループットモードでは、ファイルシステムのサイズに関係なく、ファイルシステムが処理できるスループットのレベルを指定できます。

利用する EC2 インスタンス環境

EC2 上でマウントする際には、EFS マウントヘルパーを利用しているかEFS マウントヘルパーを利用していない場合マウントオプションの推奨(値)設定などがあるので、ご確認ください。

AWS では自動的に推奨オプションを設定してくれる、EFS マウントヘルパー (amazon-efs-utils パッケージに含まれている) の利用を推奨していますのでご検討ください。

Amazon EFS マウント ヘルパーは、ファイル システムのマウントを簡素化します。デフォルトで、Amazon EFS 推奨のマウント オプションが含まれています。

なお、「ディレクトリパフォーマンスの最適化」、「NFS の read_ahead_kb サイズの最適化」の観点からも可能な限り最新版 Linux カーネルのご利用かつ、amazon-efs-utils の最新バージョンをご利用ください。

参考資料


EFS マウントヘルパーを使用せずにファイルシステムをマウントしている場合

  • NFSv4.1 クライアント の利用
    EFS の利用条件として、NFS 4.0/4.1 クライアントをサポートしている Linux を使用しなければなりません。
    パフォーマンスに優れている Linux NFSv4.1 クライアントを利用しているかご確認ください。

    NFSv4.1は、NFSv4.0(毎秒1,000ファイル未満)に比べて、小容量ファイルのparallel 読み取り操作(1秒あたり10,000 ファイル以上)のパフォーマンスが優れています。

  • オプション及び、デフォルト値
    以下のオプションについてご確認ください。
    "rsize=1048576""wsize=1048576"""hard""""timeo=600""""retrans=2""

デフォルトとは異なる他のマウントオプションを設定した場合、パフォーマンスの低下と問題が生じる可能性があります。
Linux のマウントオプションにはこちらの デフォルト値 をお勧めしてますので、ご確認ください。

We recommend the following default values for mount options on Linux:
(中略)
In general, avoid setting any other mount options that are different from the defaults, which can cause reduced performance and other issues.

リクエストモデル

Amazon EFS は共有ストレージなので非同期による書き込みが出来るようにマウント時に非同期オプション "async"を付与可能であり設定することで、スループットが向上します。

非同期書き込みを使用すると、保留中の書き込み操作をバッファリングすることでスループットが向上します。

バーストスループットモードでの検討事項

デフォルト(バーストスループットモード)を他のスループットモードへ変更出来ない運用条件などがある場合、以下 2 点をご検討ください。

  • ダミーファイルの作成
  • EC2 インスタンスタイプの確認

ダミーファイルの作成

バーストスループットモードは、「ファイルシステム内のストレージの量に応じてスケールするスループットを提供するように構築」されています。

参考資料

バーストスループットモードの仕様により、ストレージ容量を意図的に増やす ダミーファイルを作成する ことをご検討ください。スループットの向上が可能であるかと思います。

ケースによってはダミーファイルを作成するような事も考えられるかと思います。

EC2 インスタンスタイプの確認

各 EC2 インスタンスでの性能は最大 250MB/s までで、尚且つ EC2 インスタンス性能の上限もあります。 EFS がファイルシステム全体として処理できるスループット性能であるため、使用する側の EC2 インスタンスが小さくネットワーク帯域が少ない場合はボトルネックとなり、EFS のベース性能を発揮できない可能性があります。 小さいインスタンスタイプをご利用の場合、ネットワーク帯域が小さいため性能が下がるので、高性能なインスタンスタイプへの変更をご検討ください。

One Zone ストレージクラスでの検討事項

パフォーマンスとコストの観点から、同じアベイラビリティーゾーンのマウントターゲットからファイルシステムにアクセスする ことをお勧めします。 EC2 インスタンスと EFS マウントターゲットが異なるサブネットに配置されている場合、同じサブネットにすることをご検討ください。

For better performance and cost, we recommend that you access the file system from a mount target in the same Availability Zone as the EC2 instance that you're mounting it on.

補足

特に NFS や SMB のプロトコルは、小さなファイルの読み書きに対しては性能を出しにくい傾向があるため、Amazon Web Services ブログ を参考に AWS ファイルストレージサービスの変更もご検討ください。

EFS はデータを複数のアベイラビリティゾーンに分散して書き込みを行うため、可用性と耐久性は高くなりますが、小さなファイルやメタデータの書き込みについてはレイテンシーが増加する可能性があります。

想定している Amazon EFS のパフォーマンスを発揮可能であるかは、利用中のワークロードに依存するため十分に検証環境などで測定した上での変更をお勧めします。

参考資料