翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
以下のセクションでは、Amazon EFS パフォーマンスの概要と、ファイルシステムの設定が主要なパフォーマンスディメンションにどのように影響するかをご紹介します。また、ファイルシステムのパフォーマンスを最適化するための重要なヒントや推奨事項もいくつか紹介します。
トピック
パフォーマンスの概要
ファイルシステムのパフォーマンスは、通常、レイテンシー、スループット、1 秒あたりの入出力オペレーション (IOPS) のディメンションを使用して測定されます。これらの次元にわたる Amazon EFS のパフォーマンスは、ファイルシステムの設定によって異なります。次の設定は、Amazon EFS ファイルシステムのパフォーマンスに影響します。
ファイルシステムのタイプ — リージョンまたは 1 ゾーン
パフォーマンスモード — 汎用モードまたは最大 I/O
重要
最大 I/O パフォーマンスモードは、汎用パフォーマンスモードよりもオペレーションごとのレイテンシーが高くなります。パフォーマンスを向上させるには、常に汎用パフォーマンスモードを使用することをお勧めします。詳細については、「パフォーマンスモード」を参照してください。
スループットモード — エラスティック、プロビジョニングされた、バースティング
次の表は、汎用パフォーマンスモードを使用するファイルシステムのパフォーマンス仕様と、システムタイプとスループットモードから考えられるさまざまな組み合わせの概要を示しています。
ストレージとスループット設定 | レイテンシー | 最大 IOPS | 最大スループット | |||||
---|---|---|---|---|---|---|---|---|
ファイルシステムのタイプ |
スループットモード |
読み込みオペレーション |
書き込みオペレーション |
読み込みオペレーション |
書き込みオペレーション |
ファイルシステム単位の読み取り1 |
ファイルシステム単位の書き込み1 |
クライアントごとの読み取り/書き込み |
リージョン別 |
Elastic |
最低 250 マイクロ秒 (µs) |
As low as 2.7 milliseconds (ms) | 900,000–2,500,0002 | 500,0002 |
10~60 ギビバイト/秒 (GiBps) |
1~5 GiBps |
1,500 メビバイト/秒 (MiBps)3 |
リージョン別 |
Provisioned |
最低 250 µs |
As low as 2.7 ms | 55,000 | 25,000 |
3~10 GiBps |
1~3.33 GiBps |
500 MiBps |
リージョン別 |
Bursting |
最低 250 µs |
As low as 2.7 ms | 35,000 | 7,000 |
3~5 GiBps |
1~3 GiBps |
500 MiBps |
1 ゾーン |
Elastic, Provisioned, Bursting |
最低 250 µs |
最低 1.6 ミリ秒 |
35,000 | 7,000 |
3 GiBps4 |
1 GiBps4 |
500 MiBps |
注記
脚注:
読み取り/書き込みの最大スループットは、 AWS リージョンによって異なります。スループットが AWS リージョンの最大スループットを上回る場合は、スループットクォータを増やす必要があります。スループット追加のリクエストは、Amazon EFS サービスチームによって個別ケースごとに検討されます。承認はワークロードの種類によって異なる場合があります。クオータ増のリクエストについては、「Amazon EFS のクォータ」を参照してください。
-
デフォルトでは、Elastic スループットを使用するファイルシステムは、アクセス頻度の低いデータの場合は最大 90,000 の読み取り IOPS、頻繁にアクセスされるデータの場合は最大 250,000 の読み取り IOPS、50,000 の書き込み IOPS を駆動します。ワークロードでより多くの IOPS が必要な場合は、これらの数値の 10 倍までの引き上げをリクエストできます。詳細については、「引き上げることができる Amazon EFS のクォータ」を参照してください。最大 IOPS を達成するには、さらなる推奨事項が適用されます。詳細については、「高いスループットと IOPS を必要とするワークロードの最適化」を参照してください。
-
エラスティックスループットを使用し、バージョン 2.0 以降の Amazon EFS クライアント (amazon-efs-utils バージョン) または Amazon EFS CSI ドライバー (aws-efs-csi-driver) を使用してマウントされたファイルシステムでは、読み取りと書き込みを合わせた最大スループットは 1,500 MiBps になります。その他のすべてのファイルシステムでは、スループットの上限は 500 MiBps です。Amazon EFS クライアントの詳細については、「」を参照してくださいAmazon EFS クライアントの手動インストール。
-
バーストスループットを使用する 1 ゾーンファイルシステムでは、バーストスループットを使用するリージョンファイルシステムと同じファイルシステムあたりの読み取りおよび書き込みスループット量 (読み取りは最大 5 GiBps、書き込みは最大 3 GiBps) を実現できます。
ストレージクラス
Amazon EFS ストレージクラスは、ユースケースに応じて最も効果的なストレージになるように設計されています。
-
EFS 標準ストレージクラスは、ソリッドステートドライブ (SSD) ストレージを使用して、頻繁にアクセスされるファイルのレイテンシーを最小限に抑えます。このストレージクラスでは、最初のバイトのレイテンシーは、読み取りで 250 マイクロ秒、書き込みで 2.7 ミリ秒と低くなります。
EFS 低頻度アクセス (IA) ストレージクラスおよび EFS アーカイブストレージクラスは、頻繁にアクセスされるデータに求められるレイテンシーパフォーマンスを必要としない、アクセス頻度の低いデータを格納します。これらのストレージクラスでは、最初のバイトのレイテンシーが数十ミリ秒になります。
EFS ストレージクラスの詳細については、「EFS ストレージクラス」を参照してください。
パフォーマンスモード
Amazon EFS には、汎用モードと最大 I/O という 2 つのパフォーマンスモードがあります。
-
汎用モードはオペレーションごとのレイテンシーが最も低く、ファイルシステムのデフォルトのパフォーマンスモードです。1 ゾーンファイルシステムでは常に汎用パフォーマンスモードが使用されます。パフォーマンスを向上させるには、常に汎用パフォーマンスモードを使用することをお勧めします。
-
最大 I/O モードは前世代のパフォーマンスタイプで、汎用モードよりも高いレイテンシーに耐えられる高度に並列化されたワークロード向けに設計されています。最大 I/O モードは、1 ゾーンファイルシステムまたはエラスティックスループットを使用するファイルシステムではサポートされません。
重要
最大 I/O ではオペレーションごとのレイテンシーが高くなるため、すべてのファイルシステムに汎用パフォーマンスモードを使用することをお勧めします。
汎用パフォーマンスモードのファイルシステムで利用可能な IOPS 制限内にワークロードが収まるようにするには、PercentIOLimit
CloudWatch メトリクスをモニタリングできます。詳細については、「Amazon EFS の CloudWatch メトリクス」を参照してください。
アプリケーションは、パフォーマンスモードに関連する制限まで IOPS を柔軟にスケールアップできます。IOPS については個別に請求されることはありません。IOPS はファイルシステムのスループット計算に含まれます。すべてのネットワークファイルシステム (NFS) リクエストは、4 KB (スループット)、または実際のリクエストとレスポンスサイズのどちらか大きいほうのスループットとして計上されます。
スループットモード
ファイルシステムのスループットモードによって、ファイルシステムで使用できるスループットが決まります。Amazon EFS には、エラスティック、プロビジョニングされた、バーストの 3 つのスループットモードがあります。読み取りスループットは、書き込みスループットよりも読み取りスループットを高くするために割引されています。各スループットモードで使用できる最大スループットは、 AWS リージョンによって異なります。各リージョンのファイルシステムの最大スループットの詳細については、「Amazon EFS のクォータ」を参照してください。
ファイルシステムは、読み取りと書き込みの合計スループットを 100% 達成できます。たとえば、ファイルシステムが読み取りスループット制限の 33% を使用している場合、ファイルシステムは同時に書き込みスループット制限の最大 67% を達成できます。ファイルシステムのスループット使用率は、コンソールの「ファイルシステム詳細」ページにあるスループット使用率 (%) グラフでモニタリングできます。詳細については、「スループットパフォーマンスのモニタリング」を参照してください。
ファイルシステムの適正なスループットモードを選択します。
ファイルシステムに適したスループットモードの選択は、ワークロードのパフォーマンス要件によって異なります。
エラスティックスループット (推奨) - ワークロードが急上昇するなど予測不可能で、パフォーマンス要件を見積もることが難しい場合や、アプリケーションのスループットが平均対ピーク比 5% 以下の場合は、デフォルトのエラスティックスループットを使用します。詳細については、「エラスティックスループットモード」を参照してください。
-
プロビジョンドスループット - ワークロードのパフォーマンス要件がわかっている場合、またはアプリケーションが平均対ピーク比 5% 以上のスループットを実現している場合は、プロビジョンドスループットを使用します。詳細については、「プロビジョニングされたスループット」を参照してください。
-
バーストスループット - ファイルシステムのストレージ容量に合わせてスケーリングするスループットが必要な場合は、バーストスループットを使用します。
バーストスループットを使用した後、アプリケーションのスループットに制約がある場合 (例えば、許容スループットの 80% 以上を使用している場合や、バーストクレジットをすべて使い切った場合) は、エラスティックモードまたはプロビジョンドスループットモードを使用する必要があります。詳細については、「スループットのバースト」を参照してください。
Amazon CloudWatch を使用して、MeteredIOBytes
メトリクスと PermittedThroughput
メトリクスを比較することで、ワークロードの平均とピークの比率を判断できます。Amazon EFS メトリクスの詳細については、「Amazon EFS の CloudWatch メトリクス」を参照してください。
エラスティックスループットモード
エラスティックスループットを使用するファイルシステムでは、Amazon EFS はワークロードアクティビティのニーズに合わせてスループットパフォーマンスを自動的にスケールアップまたはスケールダウンします。エラスティックスループットは、パフォーマンス要件を見積もることが難しい急上昇するワークロードや予測不可能なワークロード、またはスループットの平均がピークスループットの 5% 以下 (平均対ピーク比) になるアプリケーションに最適なスループットモードです。
エラスティックスループットのファイルシステムのスループットパフォーマンスは自動的にスケールされるため、アプリケーションのニーズに合わせてスループットキャパシティを指定したりプロビジョニングしたりする必要はありません。料金は読み書きされたメタデータとデータの量に対してのみ発生し、エラスティックスループットの使用中にバーストクレジットの蓄積や消費が行われることはありません。
注記
エラスティックスループットは、汎用パフォーマンスモードを使用するファイルシステムでのみ利用できます。
リージョンごとのエラスティックスループットの制限については、「引き上げることができる Amazon EFS のクォータ」を参照してください。
プロビジョニングされたスループット
プロビジョンドスループットモードでは、ファイルシステムのサイズやバーストクレジットバランスとは無関係に、ファイルシステムが処理できるスループットのレベルを指定します。プロビジョンドスループットは、ワークロードのパフォーマンス要件がわかっている場合や、アプリケーションが平均対ピーク比 5% 以上のスループットを実現している場合に使用します。
プロビジョンドスループットを使用するファイルシステムでは、そのファイルシステムで有効になっているスループットの量に応じて課金されます。1 か月に請求されるスループット量は、標準ストレージから提供されるファイルシステムのベースラインスループットを超えてプロビジョニングされたスループットを、 AWS リージョンの一般的なバーストベースラインスループット制限まで超えてプロビジョニングされたスループットに基づいて決まります。
ファイルシステムのベースラインスループットがプロビジョンドスループット量を超える場合、ファイルシステムで許可されているバーストスループット (その中で一般的な \Bursting ベースラインスループット制限まで AWS リージョン) が自動的に使用されます。
リージョンごとのプロビジョンドスループットの制限については、「引き上げることができる Amazon EFS のクォータ」を参照してください。
スループットのバースト
バーストスループットモードは、ファイルシステムのストレージ容量に合わせてスケーリングするスループットを必要とするワークロードに推奨されます。バーストスループットでは、基本スループットは標準ストレージクラスのファイルシステムのサイズに比例し、ストレージ 1 GiB あたり 50 KiBps の割合で計算されます。バーストクレジットは、ファイルシステムの消費量が基本スループットレートを下回ると発生し、スループットが基本レートを超えると差し引かれます。
バーストクレジットが利用可能な場合、ファイルシステムはストレージの TiB あたり最大 100 MiBps のスループットを AWS リージョン 、制限まで、最低 100 MiBps で駆動できます。バーストクレジットが利用できない場合、ファイルシステムはストレージの TiB あたり最大 50 MiBps、最低でも 1 MiBps を駆動できます。
リージョンごとのバーストスループットについては、「General resource quotas that cannot be changed」を参照してください。
Amazon EFS バーストクレジットについて
バーストスループットでは、各ファイルシステムは、時間の経過に伴ってベースラインレートでバーストクレジットを獲得します。ベースラインレートは、EFS 標準ストレージクラスに格納されているファイルシステムのサイズによって決まります。ベースラインレートは、ストレージの 1 テビバイト (TiB) あたり 50 MiBps (ストレージの 1 GiB あたり 50 KiBps に相当)。Amazon EFS は、読み取りオペレーションを書き込みオペレーションの 3 分の 1 の速度まで計測するため、ファイルシステムは読み取りスループットで GiB あたり 150 KiBps、書き込みスループットで GiB あたり 50 KiBps のベースラインレートを駆動することができます。
ファイルシステムは、ベースラインの従量制レートでスループットを継続的に向上させることができます。ファイルシステムは、非アクティブであるか、スループットをベースラインの従量制レートより低くするたびに、バーストクレジットを蓄積します。蓄積されたバーストクレジットにより、ファイルシステムは、ベースラインレートを上回るスループットを駆動できます。
たとえば、標準ストレージクラスに 100 GiB の従量制データを含むファイルシステムでは、ベースラインスループットは 5 MiBps です。24 時間の非アクティブ期間中、ファイルシステムは 432,000 MiB 分のクレジットを獲得し (5 MiB x 86,400 秒 = 432,000 MiB) 、これを使用して 72 分間 100 MiBps でバーストすることができる (432,000 MiB ÷ 100 MiBps = 72 分)
1 TiB を超えるファイルシステムは、残りの 50 パーセントで非アクティブになっていると、常に最大 50 パーセントの時間バーストすることができます。
次の表に、バーストの動作の例を示します。
ファイルシステムサイズ | バーストスループット | ベースラインスループット |
---|---|---|
スタンダードストレージの 100 GiB の計測データ |
|
|
スタンダードストレージの 1 TiB の計測データ |
|
|
スタンダードストレージの 10 TiB の計測データ |
|
|
一般的には、より大規模なファイルシステム |
|
|
注記
Amazon EFS は、ベースラインレートが低くても、すべてのファイルシステムに 1 MiBps のメータリングスループットを提供します。
ベースラインレートとバーストレートを決定するために使用されるファイルシステムサイズは、DescribeFileSystems API オペレーションで使用可能な ValueInStandard
計測サイズです。
ファイルシステムは、1 TiB より小さいファイルシステムの場合、2.1 TiB、または 1 TiB を超えるファイルシステムの場合は、1 TiB あたり 2.1 TiB の最大クレジットバランスを得ることができます。この動作は、ファイルシステムが連続して最大 12 時間バーストするのに十分なクレジットを蓄積できることを示しています。
スループットの切り替えとプロビジョニング量の変更に関する制限
既存のファイルシステムのスループットモードを切り替えたり、スループット量を変更したりできます。ただし、スループットモードをプロビジョンドスループットに切り替えたり、プロビジョンドスループットの量を変更したりすると、次のアクションが 24 時間制限されます。
-
プロビジョンドスループットモードからエラスティックまたはバーストスループットモードに切り替える。
-
プロビジョンドスループットの量を引き下げる。
Amazon EFS パフォーマンスのヒント
Amazon EFS を使用する場合は、次のパフォーマンスのヒントに留意してください。
平均 I/O サイズ
Amazon EFS は分散型であるため、可用性、耐久性、およびスケーラビリティが高いレベルで実現されています。分散型のアーキテクチャによって、それぞれのファイル操作のレイテンシーオーバーヘッドも小さくなります。このオペレーションあたりのレイテンシーの影響で、オーバーヘッドがより多くのデータ量に分散されるため、通常は平均 I/O サイズの増加に応じて全体のスループットが向上します。
高いスループットと IOPS を必要とするワークロードの最適化
高いスループットと IOPS を必要とするワークロードには、汎用パフォーマンスモードとエラスティックスループットで構成されたリージョンファイルシステムを使用します。
注記
頻繁にアクセスされるデータの最大読み取り IOPS を実現するには、ファイルシステムが Elastic スループットを使用する必要があります。
最高レベルのパフォーマンスを実現するには、アプリケーションまたはワークロードを以下のように設定して並列化を活用する必要があります。
使用中のクライアントの数と少なくとも同じ数のディレクトリを使用して、すべてのクライアントとディレクトリにワークロードを均等に分散します。
個々のスレッドを個別のデータセットやファイルに配置することで、競合を最小限に抑えます。
-
10 個以上の NFS クライアントにワークロードを分散し、1 つのマウントターゲットで 1 クライアントあたり少なくとも 64 スレッドにします。
同時接続
Amazon EFS ファイルシステムは、最大数千の Amazon EC2 およびその他の AWS コンピューティングインスタンスに同時にマウントできます。より多くのインスタンス間でアプリケーションの並列化が可能である場合、コンピューティングインスタンス全体でファイルシステムのスループットレベルを向上させることができます。
リクエストモデル
ファイルシステムへの非同期書き込みを有効にすることにより、保留中の書き込みオペレーションは、非同期で Amazon EFS に書き込まれる前に、Amazon EC2 インスタンスでバッファリングされます。非同期書き込みは、通常レイテンシーが低くなります。非同期書き込みを実行するとき、カーネルはキャッシュの追加のメモリを使用します。
同期書き込みが有効になっているファイルシステム、またはキャッシュをバイパスするオプション (たとえば、O_DIRECT
) を使用してファイルを開く場合、Amazon EFS に対して同期リクエストが発行されます。各オペレーションはクライアントと Amazon EFS の間のラウンドトリップを通過します。
注記
選択したリクエストモデルでは、整合性 (複数の Amazon EC2 インスタンスを使用している場合) と速度にトレードオフがあります。同期書き込みを使用すると、次のリクエストを処理する前に各書き込みリクエストトランザクションを完了できるため、データ整合性が高まります。非同期書き込みを使用すると、保留中の書き込みオペレーションをバッファリングすることでスループットが向上します。
NFS クライアントマウント設定
EFS ファイルシステムをマウントする および Linux でのマウントに関する考慮事項 で説明されている推奨マウントオプションを使用していることを確認します。
Amazon EC2 インスタンスにファイルシステムをマウントする場合、Amazon EFS はネットワークファイルシステムバージョン 4.0 および 4.1 (NFSv4) プロトコルをサポートします。NFSv4.1 は、NFSv4.0 (1,000 ファイル/秒未満) と比較して、並列小ファイル読み取りオペレーション (10,000 ファイル/秒以上) のパフォーマンスが向上しています。macOS Big Sur を実行している Amazon EC2 macOS インスタンスでは、NFSv4.0 のみがサポートされています。
次のマウントオプションは使用しないでください。
noac
、actimeo=0
、acregmax=0
、acdirmax=0
— これらのオプションは属性キャッシュを無効にするため、パフォーマンスに非常に大きな影響を与えます。lookupcache=pos
、lookupcache=none
— これらのオプションはファイル名検索キャッシュを無効にします。これはパフォーマンスに非常に大きな影響を与えます。fsc
— このオプションはローカルファイルキャッシュを有効にしますが、NFS キャッシュの一貫性は変更されず、レイテンシーも短縮されません。
注記
ファイルシステムをマウントする際には、NFS クライアントの読み取りバッファと書き込みバッファのサイズを 1 MB に増やすことを検討してください。
スモールファイルのパフォーマンスを最適化する
ファイルの再オープンを最小限に抑え、並列処理を増やし、可能な限り参照ファイルをバンドルすることで、小容量ファイルのパフォーマンスを向上させることができます。
サーバーとの往復回数を最小限に抑えます。
後にワークフローで必要になる場合、不必要にファイルを閉じないでください。ファイル記述子を開いたままにしておくと、キャッシュ内のローカルコピーに直接アクセスできます。ファイルのオープン、クローズ、メタデータのオペレーションは、通常、非同期的に行うことも、パイプラインを介して行うこともできません。
小さいファイルの読み取りまたは書き込みでは、2 回のラウンドトリップが余分に必要になります。
1 回のラウンドトリップ (ファイルを開く、ファイルを閉じる) には、メガバイトのバルクデータの読み取りまたは書き込みと同じくらいの時間がかかる場合があります。計算ジョブの開始時に入力ファイルまたは出力ファイルを 1 回開き、ジョブの実行中ずっと開いたままにしておくほうが効率的です。
並列処理を使用すると、ラウンドトリップタイムの影響を軽減できます。
参照ファイルを
.zip
のファイルにまとめます。アプリケーションによっては、ほとんど読み取り専用の小さな参照ファイルを大量に使用している場合があります。これらを.zip
のファイルにバンドルすると、1 回のオープン/クローズの往復で多数のファイルを読み取ることができます。.zip
形式では、個々のファイルにランダムにアクセスできます。
ディレクトリパフォーマンスの最適化
同時に変更される非常に大きなディレクトリ (10 万ファイル以上) に対して一覧表示 (ls) を実行すると、Linux NFS クライアントが応答を返さずにハングアップすることがあります。この問題は Amazon Linux 2 カーネル 4.14、5.4、5.10 に移植されたカーネル 5.11 では修正されています。
可能であれば、ファイルシステムのディレクトリ数を 10,000 未満に抑えることをお勧めします。可能な限りネストされたサブディレクトリを使用します。
ディレクトリを一覧表示する際は、ファイル属性はディレクトリ自体に保存されていないため、必要ない場合には取得を避けます。
NFS を最適化する read_ahead_kb サイズ
NFS read_ahead_kb
属性は、シーケンシャル読み取りオペレーション中に Linux カーネルが先読みまたはプリフェッチするキロバイト数を定義します。
5.4.* より前のバージョンの Linux カーネルでは、read_ahead_kb
の値は、NFS_MAX_READAHEAD
に rsize
の値 (マウントオプションで設定されたクライアント設定の読み取りバッファサイズ) を乗じて設定されます。推奨されるマウントオプションを使用する場合、この式は read_ahead_kb
を15MBに設定します。
注記
Linux カーネルバージョン 5.4.* 以降、Linux NFS クライアントは、デフォルトの read_ahead_kb
の値である 128 KB を使用します。この値を 15 MB に増やすことをお勧めします。
amazon-efs-utils
バージョン 1.33.2 以降で利用可能な Amazon EFS マウントヘルパーは、ファイルシステムをマウントした後、read_ahead_kb
の値を 15 * rsize
、または 15 MB に自動的に変更します。
Linux カーネル 5.4 以降では、マウントヘルパーを使用してファイルシステムをマウントしない場合は、パフォーマンスを向上させるために read_ahead_kb
を手動で 15 MB に設定することを検討してください。ファイルシステムをマウントした後、次のコマンドを使用して read_ahead_kb
値をリセットできます。コマンドを使用する前に、次の値を置き換えます。
を希望するサイズ (キロバイト単位) に置き換えます。read-ahead-value-kb
ファイルシステムのマウントポイントで
を置き換えます。efs-mount-point
device_number=$(stat -c '%d'
efs-mount-point
) ((major = ($device_number & 0xFFF00) >> 8)) ((minor = ($device_number & 0xFF) | (($device_number >> 12) & 0xFFF00))) sudo bash -c "echoread-ahead-value-kb
> /sys/class/bdi/$major:$minor/read_ahead_kb"
たとえば、次の例では、 read_ahead_kb
サイズを 15 MB に設定します。
device_number=$(stat -c '%d' efs)
((major = ($device_number & 0xFFF00) >> 8))
((minor = ($device_number & 0xFF) | (($device_number >> 12) & 0xFFF00)))
sudo bash -c "echo 15000 > /sys/class/bdi/$major:$minor/read_ahead_kb"