EFS ファイルシステムのパフォーマンスが遅いのはなぜですか?
Amazon Elastic File System (Amazon EFS) のパフォーマンスが非常に遅いです。パフォーマンスが遅いことの一般的な理由は何ですか? また、トラブルシューティングするにはどうすればよいですか?
簡単な説明
Amazon EFS の分散型マルチアベイラビリティーゾーンアーキテクチャでは、各ファイルオペレーションのレイテンシーオーバーヘッドが小さくなります。通常は平均 I/O サイズの増加に応じて全体のスループットが向上します。これは、大量のデータにオーバーヘッドが分散するためです。
Amazon EFS のパフォーマンスは、次を含む複数の要因に依拠します。
- EFS のストレージクラス。
- パフォーマンスとスループットモード。
- EFS で実行されるオペレーションのタイプ (メタデータ多用型など)。
- EFS に保存されているデータのプロパティ (ファイルのサイズや数など)。
- マウントオプション。
- クライアント側の制限。
解決方法
EFS のストレージクラス
詳細については、「パフォーマンスの概要」を参照してください。
パフォーマンスとスループットモード
パフォーマンスモード
Amazon EFS は、汎用と最大 I/O の 2 つのパフォーマンスモードを提供します。アプリケーションは、パフォーマンスモードに関連する制限まで IOPS を伸縮自在にスケールできます。使用するパフォーマンスモードを判断するには、「Amazon EFS での汎用 I/O パフォーマンスモードと最大 I/O パフォーマンスモードの違いを教えてください」を参照してください。
スループットモード
ファイルベースのワークロードは通常高低差が激しく、短期間で高レベルのスループットが発生しますが、低レベルのスループットは長期間発生します。Amazon EFS は一定期間内のスループットレベルのバーストが許可されるように設計されています。
設定されたスループットと IOPS は、Amazon EFS のパフォーマンスに影響します。ワークロード要件をベンチマークして、適切なスループットとパフォーマンスモードの選択に役立てることがベストプラクティスです。プロビジョンドスループットを選択するときは、ワークロード要件に適切に対応する値を選択します。バーストスループットモードの場合、ダミーファイルを使用して Amazon EFS のサイズを大きくして、ベースラインスループットを増やすことができます。ファイルシステムによって消費されるスループットと IOPS を分析するには、「Using metric math with Amazon EFS」(Amazon EFS でのメトリクスの計算の使用) を参照してください。
また、Amazon EFS はペタバイト規模のストレージボリュームまでスケールアップし、バーストとプロビジョンドの 2 つのスループットモードを備えています。バーストモードでは、EFS ファイルシステムのサイズが大きいほど、スループットのスケーリングが大きくなります。プロビジョンドモードの場合、ファイルシステムのスループットは、データ量とは関係なく、MB/秒単位で設定されます。スループットモードの詳細については、「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 (測定: Amazon EFS がファイルシステムとオブジェクトのサイズをレポートする方法)。
小さなファイルのパフォーマンスを最適化します。
マウントオプション
- amazon-efs-utils を使用してファイルシステムをマウントする場合、推奨されるマウントオプションがデフォルトで適用されます。
- デフォルト以外のマウントオプションを使用すると、パフォーマンスが低下する可能性があります。例えば、rsize と wsize を小さくしたり、[Attribute Caching] (属性キャッシュ) を小さくしたりオフにしたりします。mount コマンドの出力で、現在設定されているマウントオプションを確認できます。
詳細については、「Mount the file system on the EC2 instance and test」(EC2 インスタンスにファイルシステムをマウントしてテストする) を参照してください。
コマンド例
>> mount
出力例
fs-EXAMPLE3f75f.efs.us-east-1.amazonaws.com:/ on /home/ec2-user/efs type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=<EXAMPLEIP>,local_lock=none,addr=<EXAMPLEIP>)
NFS クライアントバージョン
Network File System (NFS) バージョン 4.1 (NFSv4) プロトコルでは、NFSv4.0 (1 秒あたり 1,000 ファイル未満) と比較して、小さなファイルの並列読み取りオペレーション (1 秒あたり 10,000 ファイル超) のパフォーマンスが向上します。
詳細については、「NFS クライアントマウント設定」を参照してください。
クライアント側の制限
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 は並列オペレーションではなくシリアル (シングルスレッド) オペレーションで動作することに注意してください。これにより、コピーが遅くなります。fpart や NU Parallel などのツールを使用します。fpart は、ファイルツリーをソートして「パーティション」にパックするのに役立つツールです。fpart には fpsync というシェルスクリプトが付属しています。このスクリプトは fpart と rsync をラップして、複数の rsync を並列に起動します。fpsync は独自の組み込みスケジューラを提供します。これにより、より一般的なシリアル方式を使用するよりも早くこれらのタスクを完了することができます。
詳細については、「Amazon EFS performance tips」(Amazon EFS パフォーマンスのヒント) を参照してください。
関連情報
関連するコンテンツ
- 質問済み 4年前lg...
- 質問済み 4ヶ月前lg...
- 質問済み 10ヶ月前lg...
- AWS公式更新しました 4年前
- AWS公式更新しました 2年前