翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EFSのパフォーマンス
以下のセクションでは、Amazon EFSのパフォーマンスの概要と、ファイルシステム設定が主要なパフォーマンスディメンションにどのように影響するかについて説明します。また、ファイルシステムのパフォーマンスを最適化するための重要なヒントや推奨事項もいくつか紹介します。
トピック
パフォーマンスの概要
ファイルシステムのパフォーマンスは、通常、レイテンシー、スループット、1 秒あたりの入出力オペレーション () のディメンションを使用して測定されますIOPS。これらのディメンションにわたる Amazon EFSのパフォーマンスは、ファイルシステムの設定によって異なります。次の設定は、Amazon EFS ファイルシステムのパフォーマンスに影響します。
ファイルシステムのタイプ — リージョンまたは 1 ゾーン
パフォーマンスモード — 汎用モードまたは最大 I/O
重要
最大 I/O パフォーマンスモードは、汎用パフォーマンスモードよりもオペレーションごとのレイテンシーが高くなります。パフォーマンスを向上させるには、常に汎用パフォーマンスモードを使用することをお勧めします。詳細については、「パフォーマンスモード」を参照してください。
スループットモード — エラスティック、プロビジョニングされた、バースティング
次の表は、汎用パフォーマンスモードを使用したファイルシステムのパフォーマンス仕様と、ファイルシステムタイプとスループットモードのさまざまな組み合わせの概要を示しています。
ストレージとスループット設定 | レイテンシー | 最大 IOPS | 最大スループット | |||||
---|---|---|---|---|---|---|---|---|
ファイルシステムのタイプ |
スループットモード |
読み込みオペレーション |
書き込みオペレーション |
読み込みオペレーション |
書き込みオペレーション |
Per-file-system 読み取り 1 |
Per-file-system 書き込み 1 |
クライアントごとの読み取り/書き込み |
リージョン別 |
Elastic |
最低 250 マイクロ秒 (µs) |
最低 2.7 ミリ秒 (ms) | 90,000~250,0002 | 50,000 |
10~60 ギビバイト/秒 (GiBps) |
1~5 GiBps |
1,500 メガバイト/秒 (MiBps)3 |
リージョン別 |
プロビジョン済み |
最低 250 µs |
最低 2.7 ミリ秒 | 55,000 | 25,000 |
3~10 GiBps |
1~3.33 GiBps |
500 MiBps |
リージョン別 |
バースト |
最低 250 µs |
最低 2.7 ミリ秒 | 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 リージョンの最大スループットを上回る場合は、スループットクォータを増やす必要があります。追加のスループットのリクエストは、 case-by-caseAmazon EFSサービスチームによって考慮されます。承認はワークロードの種類によって異なる場合があります。クオータ増のリクエストについては、「Amazon EFS クォータ」を参照してください。
-
Elastic スループットを使用するファイルシステムは、アクセス頻度の低いデータIOPSでは最大 90,000 リード、頻繁にアクセスされるデータIOPSでは最大 250,000 リードを駆動できます。最大 を達成するには、追加の推奨事項が適用されますIOPS。詳細については、「高いスループットと IOPS」を参照してください。
-
Elastic スループットを使用し、Amazon EFSクライアント (amazon-efs-utils バージョン) または Amazon EFSCSIドライバー () のバージョン 2.0 以降を使用してマウントされる MiBps ファイルシステムの場合、最大合計読み取りスループットと書き込みスループットは 1,500 ですaws-efs-csi-driver。他のすべてのファイルシステムでは、スループット制限は 500 です MiBps。Amazon EFSクライアントの詳細については、「」を参照してください。 Amazon EFSクライアントのインストール
-
Bursting スループットを使用する 1 ゾーンファイルシステムは、Bursting スループットを使用するリージョンファイルシステムと同じ per-file-system読み取りおよび書き込みスループット量を駆動できます (最大読み取りは GiBps 5 で、書き込み GiBps は 3 です)。
ストレージクラス
Amazon EFSストレージクラスは、ユースケースに応じて最も効果的なストレージ用に設計されています。
-
EFS 標準ストレージクラスは、ソリッドステートドライブ (SSD) ストレージを使用して、頻繁にアクセスされるファイルのレイテンシーを最小レベルにします。このストレージクラスは、読み込みの場合は 250 マイクロ秒、書き込みの場合は 2.7 ミリ秒という低レイテンシーを提供します。
EFS 低頻度アクセス (IA) およびEFSアーカイブストレージクラスは、頻繁にアクセスするデータに必要なレイテンシーパフォーマンスを必要としない、アクセス頻度の低いデータを保存します。これらのストレージクラスでは、最初のバイトのレイテンシーが数十ミリ秒になります。
EFS ストレージクラスの詳細については、「」を参照してくださいEFS ストレージクラス。
パフォーマンスモード
Amazon EFSには、汎用と最大 I/O の 2 つのパフォーマンスモードがあります。
-
汎用モードはオペレーションごとのレイテンシーが最も低く、ファイルシステムのデフォルトのパフォーマンスモードです。ワンゾーンファイルシステムは常に汎用パフォーマンスモードを使用します。パフォーマンスを向上させるには、常に汎用パフォーマンスモードを使用することをお勧めします。
-
最大 I/O モードは前世代のパフォーマンスタイプで、汎用モードよりも高いレイテンシーに耐えられる高度に並列化されたワークロード向けに設計されています。最大 I/O モードは、1 ゾーンファイルシステムまたはエラスティックスループットを使用するファイルシステムではサポートされません。
重要
最大 I/O ではオペレーションごとのレイテンシーが高くなるため、すべてのファイルシステムに汎用パフォーマンスモードを使用することをお勧めします。
汎用パフォーマンスモードを使用して、ワークロードがファイルシステムで利用可能なIOPS制限内に収まるようにするには、PercentIOLimit
CloudWatch メトリクスをモニタリングできます。詳細については、「CloudWatch Amazon のメトリクス EFS」を参照してください。
アプリケーションは、パフォーマンスモードに関連する制限までIOPS伸縮自在にスケールできます。に対して個別に請求されることはありませんIOPS。これらはファイルシステムのスループットアカウンティングに含まれます。すべてのネットワークファイルシステム (NFS) リクエストは、4 キロバイト (KB) のスループット、またはその実際のリクエストとレスポンスサイズのいずれか大きい方として処理されます。
スループットモード
ファイルシステムのスループットモードによって、ファイルシステムで使用できるスループットが決まります。Amazon EFSには、Elastic、Provisioned、Bursting の 3 つのスループットモードがあります。読み取りスループットは、書き込みスループットよりも読み取りスループットを高くするために割引されています。各スループットモードで使用できる最大スループットは、 AWS リージョンによって異なります。各リージョンのファイルシステムの最大スループットの詳細については、「Amazon EFS クォータ」を参照してください。
ファイルシステムは、読み取りと書き込みの合計スループットを 100% 達成できます。たとえば、ファイルシステムが読み取りスループット制限の 33% を使用している場合、ファイルシステムは同時に書き込みスループット制限の最大 67% を達成できます。ファイルシステムのスループット使用率は、コンソールの「ファイルシステム詳細」ページにあるスループット使用率 (%) グラフでモニタリングできます。詳細については、「スループットパフォーマンスのモニタリング」を参照してください。
ファイルシステムの適正なスループットモードを選択します。
ファイルシステムに適したスループットモードの選択は、ワークロードのパフォーマンス要件によって異なります。
Elastic スループット (推奨) – 予測が難しい急激または予測不可能なワークロードやパフォーマンス要件がある場合、またはアプリケーションが 5% 以下の比率で average-to-peakスループットを駆動する場合は、デフォルトの Elastic スループットを使用します。詳細については、「Elastic スループット」を参照してください。
-
プロビジョンドスループット – ワークロードのパフォーマンス要件がわかっている場合、またはアプリケーションが 5% 以上の比率でスループットを駆動する場合は、 average-to-peakプロビジョンドスループットを使用します。詳細については、「プロビジョニングされたスループット」を参照してください。
-
バーストスループット – ファイルシステムのストレージ量に合わせてスケーリングするスループットが必要な場合は、バーストスループットを使用します。
Bursting スループットを使用した後、アプリケーションがスループットに制約があることが判明した場合 (例えば、許可されたスループットの 80% 以上を使用しているか、すべてのバーストクレジットを使用している)、Elastic スループットまたはプロビジョンドスループットを使用する必要があります。詳細については、「スループットのバースト」を参照してください。
Amazon を使用して CloudWatch 、MeteredIOBytes
メトリクスとPermittedThroughput
メトリクスを比較することでワークロード average-to-peakの比率を決定できます。Amazon EFSメトリクスの詳細については、「」を参照してくださいCloudWatch Amazon のメトリクス EFS。
Elastic スループット
Elastic スループットを使用しているファイルシステムの場合、Amazon はワークロードアクティビティのニーズに合わせてスループットパフォーマンスEFSを自動的にスケールアップまたはスケールダウンします。Elastic スループットは、予測が難しいパフォーマンス要件を伴う急激なワークロードや予測不可能なワークロード、または平均でピークスループットの 5% 以下 ( average-to-peak比率) でスループットを駆動するアプリケーションに最適なスループットモードです。
Elastic スループットを持つファイルシステムのスループットパフォーマンスは自動的にスケーリングされるため、アプリケーションのニーズを満たすためにスループット容量を指定またはプロビジョニングする必要はありません。メタデータとデータの読み取りまたは書き込み量に対してのみ支払い、Elastic スループットの使用中にバーストクレジットを蓄積または消費することはありません。
注記
Elastic スループットは、汎用パフォーマンスモードを使用するファイルシステムでのみ使用できます。
リージョンごとの Elastic スループット制限の詳細については、「」を参照してください増加できる Amazon EFS クォータ。
プロビジョニングされたスループット
プロビジョンドスループットでは、ファイルシステムのサイズやバーストクレジットバランスに関係なく、ファイルシステムが駆動できるスループットレベルを指定します。ワークロードのパフォーマンス要件がわかっている場合、またはアプリケーションがスループットを average-to-peak 5% 以上向上させる場合は、プロビジョンドスループットを使用します。
プロビジョンドスループットを使用するファイルシステムの場合、ファイルシステムで有効なスループットの量が課金されます。1 か月に請求されるスループット量は、標準ストレージから提供されるファイルシステムのベースラインスループットを超えてプロビジョニングされたスループットを、 AWS リージョンの一般的なバーストベースラインスループット制限まで超えてプロビジョニングされたスループットに基づいて決まります。
ファイルシステムのベースラインスループットがプロビジョンドスループット量を超える場合、ファイルシステムに対して許可されるバーストスループットが自動的に使用されます (その の一般的な \Bursting ベースラインスループット制限まで AWS リージョン)。
RegionProvisioned スループットあたりの制限の詳細については、「」を参照してください増加できる Amazon EFS クォータ。
スループットのバースト
バーストスループットは、ファイルシステムのストレージ量に応じてスケーリングされるスループットを必要とするワークロードに推奨されます。Bursting スループットでは、ベーススループットは、標準ストレージクラスのファイルシステムのサイズに比例し、ストレージの 1 GiB KiBps あたり 50 のレートになります。バーストクレジットは、ファイルシステムの消費量が基本スループットレートを下回ると発生し、スループットが基本レートを超えると差し引かれます。
バーストクレジットが利用可能な場合、ファイルシステムはストレージの 1 TiB あたり最大 100 MiBps、 AWS リージョン 上限まで、最低 100 のスループットを駆動できます MiBps。バーストクレジットが利用できない場合、ファイルシステムはストレージの 1 TiB MiBps あたり最大 50 個、最低 1 個までドライブできます MiBps。
リージョンごとのバーストスループットの詳細については、「」を参照してくださいGeneral resource quotas that cannot be changed。
Amazon EFSバーストクレジットについて
バーストスループットでは、各ファイルシステムは、EFS標準ストレージクラスに保存されているファイルシステムのサイズによって決定されるベースラインレートで、時間の経過とともにバーストクレジットを取得します。ベースラインレートは、ストレージのテビバイト MiBps あたり 50 [TiB ] (ストレージの GiB KiBps あたり 50 に相当) です。Amazon EFS メーターの読み取りオペレーションは書き込みオペレーションの 3 分の 1 のレートで、ファイルシステムは読み取りスループットの 1 GiB KiBps あたり最大 150、または書き込みスループットの 50 GiB KiBps あたり最大 150 のベースラインレートを駆動できます。
ファイルシステムは、ベースラインの従量制レートでスループットを継続的に向上させることができます。ファイルシステムは、非アクティブであるか、スループットをベースラインの従量制レートより低くするたびに、バーストクレジットを蓄積します。蓄積されたバーストクレジットにより、ファイルシステムは、ベースラインレートを上回るスループットを駆動できます。
例えば、標準ストレージクラスに 100 GiB の計測データを持つファイルシステムの場合、ベースラインスループットは 5 です MiBps。24 時間の非アクティブ時間で、ファイルシステムは 432,000 MiB 相当のクレジット (5 MiB × 86,400 秒 = 432,000 MiB) を獲得します。これは 100 で 72 MiBps 分間バーストするために使用できます (432,000 MiB ÷ 100 MiBps = 72 分)。
1 TiB を超えるファイルシステムは、残りの 50 パーセントで非アクティブになっていると、常に最大 50 パーセントの時間バーストすることができます。
次の表に、バーストの動作の例を示します。
ファイルシステムサイズ | バーストスループット | ベースラインスループット |
---|---|---|
スタンダードストレージの 100 GiB の計測データ |
|
|
スタンダードストレージの 1 TiB の計測データ |
|
|
スタンダードストレージの 10 TiB の計測データ |
|
|
一般的には、より大規模なファイルシステム |
|
|
注記
Amazon EFSは、ベースラインレートが低い場合でも、 MiBps すべてのファイルシステムに 1 の計測スループットを提供します。
ベースラインレートとバーストレートを決定するために使用されるファイルシステムサイズは、 DescribeFileSystems API オペレーションで使用可能なValueInStandard
計測サイズです。
ファイルシステムは、1 TiB より小さいファイルシステムの場合、2.1 TiB、または 1 TiB を超えるファイルシステムの場合は、1 TiB あたり 2.1 TiB の最大クレジットバランスを得ることができます。この動作は、ファイルシステムが連続して最大 12 時間バーストするのに十分なクレジットを蓄積できることを示しています。
スループットの切り替えとプロビジョニングされた量の変更に関する制限
既存のファイルシステムのスループットモードを切り替えたり、スループット量を変更したりできます。ただし、スループットモードをプロビジョンドスループットに切り替えるか、プロビジョンドスループット量を変更した後、次のアクションは 24 時間制限されます。
-
プロビジョンドスループットモードから Elastic または Bursting スループットモードに切り替えます。
-
プロビジョンドスループット量を減らします。
Amazon EFSのパフォーマンスに関するヒント
Amazon を使用する場合はEFS、次のパフォーマンスのヒントに注意してください。
平均 I/O サイズ
Amazon の分散性EFSにより、高いレベルの可用性、耐久性、スケーラビリティが可能になります。分散型のアーキテクチャによって、それぞれのファイル操作のレイテンシーオーバーヘッドも小さくなります。このオペレーションあたりのレイテンシーの影響で、オーバーヘッドがより多くのデータ量に分散されるため、通常は平均 I/O サイズの増加に応じて全体のスループットが向上します。
高いスループットと IOPS
高スループットと を必要とするワークロードではIOPS、汎用パフォーマンスモードと Elastic スループットで設定されたリージョンファイルシステムを使用します。
注記
IOPS 頻繁にアクセスされるデータの最大読み取り数を 250,000 にするには、ファイルシステムで Elastic スループットを使用する必要があります。
最高レベルのパフォーマンスを実現するには、アプリケーションまたはワークロードを以下のように設定して並列化を活用する必要があります。
使用中のクライアントの数と少なくとも同じ数のディレクトリを使用して、すべてのクライアントとディレクトリにワークロードを均等に分散します。
個々のスレッドを個別のデータセットやファイルに配置することで、競合を最小限に抑えます。
-
ワークロードを 10 以上のNFSクライアントに分散し、1 つのマウントターゲットでクライアントあたり少なくとも 64 スレッドを使用します。
同時接続
Amazon EFS ファイルシステムは、最大数千の Amazon EC2およびその他の AWS コンピューティングインスタンスに同時にマウントできます。より多くのインスタンス間でアプリケーションの並列化が可能である場合、コンピューティングインスタンス全体でファイルシステムのスループットレベルを向上させることができます。
リクエストモデル
ファイルシステムへの非同期書き込みを有効にすると、保留中の書き込みオペレーションは Amazon EC2インスタンスでバッファされ、Amazon EFS に非同期的に書き込まれます。非同期書き込みは、通常レイテンシーが低くなります。非同期書き込みを実行するとき、カーネルはキャッシュの追加のメモリを使用します。
同期書き込みを有効にしたファイルシステム、またはキャッシュをバイパスするオプション ( などO_DIRECT
) を使用してファイルを開くファイルシステムは、Amazon に同期リクエストを発行しますEFS。すべてのオペレーションは、クライアントと Amazon の間で往復しますEFS。
注記
選択したリクエストモデルには、一貫性 (複数の Amazon EC2インスタンスを使用している場合) と速度のトレードオフがあります。同期書き込みを使用すると、次のリクエストを処理する前に各書き込みリクエストトランザクションを完了できるため、データ整合性が高まります。非同期書き込みを使用すると、保留中の書き込みオペレーションをバッファリングすることでスループットが向上します。
NFS クライアントマウント設定
EFS ファイルシステムのマウント および Linux のマウントに関する考慮事項 で説明されている推奨マウントオプションを使用していることを確認します。
Amazon EC2インスタンスにファイルシステムをマウントする場合、Amazon は Network File System バージョン 4.0 および 4.1 (NFSv4) プロトコルEFSをサポートしています。NFSv4.1 は、NFSv4.0 (1 秒あたり 1,000 ファイル未満) と比較して、並列小ファイル読み取りオペレーション (1 秒あたり 10,000 ファイル超) のパフォーマンスを向上させます。macOS Big Sur EC2 を実行している Amazon 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
形式では、個々のファイルにランダムにアクセスできます。
ディレクトリパフォーマンスの最適化
同時に変更される非常に大きなディレクトリ (100,000 ファイル以上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"