EFS ファイルシステムのパフォーマンスが遅いのはなぜですか?

所要時間2分
0

Amazon Elastic File System (Amazon EFS) のパフォーマンスが非常に遅いです。原因を特定し、問題のトラブルシューティングをしたいと考えています。

簡単な説明

Amazon EFS の分散型マルチアベイラビリティーゾーンアーキテクチャでは、各ファイルオペレーションのレイテンシーオーバーヘッドが小さくなります。通常は平均 I/O サイズの増加に応じて全体のスループットが向上します。これは、大量のデータにオーバーヘッドが分散するためです。

Amazon EFS のパフォーマンスは、次を含む複数の要因に依拠します。

  • EFS のストレージクラス。
  • パフォーマンスモードとスループットモード。
  • EFS で実行されるオペレーションのタイプ (メタデータ集約型など)。
  • EFS に保存されているデータのプロパティ (ファイルのサイズや数など)。
  • マウントオプション。
  • クライアント側の制限。

解決策

EFS のストレージクラス

詳細については、パフォーマンスの概要を参照してください。

パフォーマンスモードとスループットモード

パフォーマンスモード

Amazon EFS には、汎用と最大 I/O の 2 つのパフォーマンスモードがあります。アプリケーションは、パフォーマンスモードに関連する制限まで IOPS を伸縮自在にスケールできます。

使用するパフォーマンスモードを判断するには、パフォーマンスモードを参照してください。

スループットモード

ファイルベースのワークロードは通常、短期間では高レベルのスループットを実現しますが、長期間ではスループットは低レベルになります。Amazon EFS は、一定期間にわたって高レベルのスループットまでバーストするように設計されています。

設定されたスループットと IOPS は、Amazon EFS のパフォーマンスに影響します。

ワークロード要件をベンチマークして、適切なスループットとパフォーマンスモードの選択に役立てることがベストプラクティスです。プロビジョニングされたスループットを選択する場合は、ワークロード要件に対応する値を選択します。ファイルシステムによって消費されるスループットと IOPS を分析するには、Using metric math with Amazon EFS を参照してください。

Amazon EFS は、バースト、エラスティック、プロビジョニングの 3 つのスループットモードを使用して、ペタバイト単位のストレージボリュームまでスケールアップできます。バーストスループットを使用する場合、Amazon EFS のスループットはファイルシステムの拡大に合わせてスケーリングされます。プロビジョニングされたスループットを使用すると、保存されているデータの量に関係なく、ファイルシステムのスループットを即座にプロビジョニングできます。エラスティックスループットでは、ワークロードに応じてスループットをスケールアップまたはスケールダウンできます。スループットモードの詳細については、Amazon EFS バーストクレジットの仕組みを参照してください。

EC2 インスタンスで実行されるオペレーションのタイプ

メタデータ I/O オペレーション

EFS のパフォーマンスは、次の状況で低下します。

  • 分散型システムであるためにファイルサイズが小さい場合。分散型アーキテクチャによって、それぞれのファイルオペレーションのレイテンシーオーバーヘッドも小さくなります。このオペレーションあたりのレイテンシーにより、通常は平均 I/O サイズの増加に応じて全体のスループットが向上します。これは、大量のデータにオーバーヘッドが分散するためです。
  • ワークロードまたはオペレーションによって多数の小さなファイルが連続して生成されると、共有ファイルシステムのパフォーマンスが低下します。これにより、各オペレーションのオーバーヘッドが増加します。
  • メタデータ I/O は、アプリケーションが「ls」、「rm」、「mkdir」、「rmdir」、「lookup」、「getattr」、「setattr」などのメタデータを多用するオペレーションを実行する場合に発生します。システムが特定のブロックのアドレスを取得することを要求するオペレーションは、メタデータを多用するワークロードとみなされます。詳細については、以下を参照してください。
    Metering: How Amazon EFS reports file system and object sizes and Performance tips

マウントオプション

  • amazon-efs-utilsを使用してファイルシステムをマウントする場合、推奨されるマウントオプションがデフォルトで適用されます。
  • デフォルト以外のマウントオプションを使用すると、パフォーマンスが低下する可能性があります。たとえば、rsizewsize を小さくしたり、Attribute Cachingを小さくしたりオフにしたりする場合です。mount コマンドの出力で、現在設定されているマウントオプションを確認できます。

詳細については、Mount the file system on the EC2 instance and testを参照してください。

NFS クライアントバージョン

Network File System (NFS) バージョン 4.1 (NFSv4) プロトコルでは、NFSv4.0 (1 秒あたり 1,000 ファイル未満) と比較して、小さなファイルの並列読み取りオペレーション (1 秒あたり 10,000 ファイル超) のパフォーマンスが向上します。

クライアント側の制限

EC2 インスタンスのボトルネック

ファイルシステムを使用するアプリケーションが想定されるパフォーマンスを EFS から引き出していない場合は、アプリケーションを最適化します。また、アプリケーションがホストされているホストまたはサービス (Amazon EC2、AWS Lambda など) をベンチマークします。EC2 インスタンスのリソース不足は、アプリケーションが EFS を効果的に使用する能力に影響を与える可能性があります。

EC2 がアプリケーション要件に対してプロビジョニング不足でないかを確認するには、CPU、Amazon Elastic Block Store (Amazon EBS) などの Amazon EC2 CloudWatch メトリクスをモニタリングします。アプリケーションアーキテクチャとリソース要件に関するさまざまなメトリクスを分析すると、要件に応じてアプリケーションまたはインスタンスを再設定する必要があるかどうかを判断するのに役立ちます。

4.0 以降の Linux カーネルバージョンを使用する

最適なパフォーマンスを実現し、さまざまな既知の NFS クライアントのバグを回避するために、Linux カーネルバージョン 4.0 以降の AMI を使用するのがベストプラクティスです。

このルールの例外は、RHEL と CentOS 7.3 以降です。これらのオペレーティングシステムのカーネルは、NFS v4.1 に適用された修正と機能強化のバックポートされています。詳細については、NFS サポートを参照してください。

ファイルのコピー

cp コマンドを使用してファイルをコピーすると、速度が低下することがあります。これは、copy コマンドが連続オペレーションであり、各ファイルを一度に 1 つずつコピーするためです。各ファイルのファイルサイズが小さい場合、そのファイルを送信するスループットは小さくなります。

また、ファイルを送信するときにもレイテンシーが発生することがあります。EFS は分散型の性質を有しており、すべてのマウントポイントにレプリケートする必要があるため、ファイルオペレーションごとにオーバーヘッドが発生します。したがって、ファイル送信におけるレイテンシーは想定される事態です。

推奨事項

rsync を使用するなど、並列 I/O オペレーションを実行するのがベストプラクティスです。rsync を使用している場合、cp と rsync は並列オペレーションではなくシリアル (シングルスレッド) オペレーションで動作することに注意してください。これにより、コピーが遅くなります。fpartNU Parallel などのツールを使用します。fpart は、ファイルツリーをソートして「パーティション」にパックするのに役立つツールです。fpart には、fpsync というシェルスクリプトが付属しています。このスクリプトは fpartrsync をラップして、複数の rsync を並列に起動します。fpsync は独自の組み込みスケジューラを提供します。これにより、より一般的なシリアル方式を使用するよりも早くこれらのタスクを完了することができます。

詳細については、Amazon EFS performance を参照してください。

関連情報

NFS クライアントのクォータ

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ