1. はじめに
意気揚々と以下の記事を書いたのですが、今自分の業務で Lustre 使っていたので何も考えずに比較対象として選んでいました。
でも広く利用されているのは Amazon EFS の方ですよね。
ということで比較対象に Amazon EFS を加えて同じベンチマークを実施した結果を共有しておきます。
2. 背景
Amazon S3 Files は Amazon EFS の技術基盤上に構築されたマネージドファイルシステムである。S3 バケットに NFS インターフェースを提供する S3 Files と、汎用 NFS ファイルシステムである EFS は、内部アーキテクチャを共有しながらも異なるユースケースを対象としている。
本資料では、S3 Files と FSx for Lustre の比較検証 (別資料) で使用した環境に EFS を追加し、同一条件で 3 サービスの I/O 性能を比較する。S3 Files と EFS の性能差を通じて、S3 統合レイヤーが性能に与える影響を明らかにする。
3. 概要
3.1 検証の目的
FSx for Lustre、Amazon S3 Files、Amazon EFS の 3 サービスについて、同一の EC2 インスタンス上で基本 I/O 性能を比較する。
3.2 検証の範囲
単一 EC2 インスタンスからの Direct I/O による基本性能比較であり、以下を含む。
- シーケンシャル / ランダム Read/Write (fio, iodepth=1)
- 大ファイル転送 (dd 4GiB, Direct I/O)
- メタデータ操作 (5,000 ファイル create/stat/delete)
- iodepth スイープ (1 / 16 / 32 / 64)
- 小ファイル閾値テスト (4KB - 1MB)
3.3 結論の要約
EFS と S3 Files は基本テストの大半で極めて近い性能を示した (差は 10-20% 以内)。これは両サービスが同じ EFS 基盤を共有していることと整合する。一方、小ファイル Read では EFS が S3 Files を 1.5 倍上回り、S3 統合レイヤーのオーバーヘッドが示唆された。高 iodepth (>=32) の Seq Read では EFS と S3 Files がともに Lustre を上回った。ただし Seq Write では iodepth=16 で Lustre が依然として最速であり、逆転は iodepth=32 以降に限られる。
3.4 テスト結果一覧
基本テスト (iodepth=1, numjobs=4, Direct I/O)
| カテゴリ | テスト | FSx for Lustre | S3 Files | EFS | 最速 |
|---|---|---|---|---|---|
| Seq スループット | Write (MiB/s) | 576.5 | 127.3 | 116.6 | Lustre 4.5x/4.9x |
| Read (MiB/s) | 590.7 | 282.7 | 292.3 | Lustre 2.1x/2.0x | |
| Seq レイテンシ | Write (ms) | 6.9 | 31.4 | 34.3 | Lustre 4.6x/5.0x |
| Read (ms) | 6.8 | 14.1 | 13.6 | Lustre 2.1x/2.0x | |
| Rand 4K | Write (IOPS) | 1,358 | 404 | 416 | Lustre 3.4x/3.3x |
| Read (IOPS) | 3,025 | 1,109 | 1,500 | Lustre 2.7x/2.0x | |
| Rand 4K レイテンシ | Write (ms) | 2.9 | 9.9 | 9.6 | Lustre 3.4x/3.3x |
| Read (ms) | 1.3 | 3.6 | 2.7 | Lustre 2.8x/2.1x | |
| Mixed 256K 70:30 | Read (MiB/s) | 278.8 | 79.3 | 92.1 | Lustre 3.5x/3.0x |
| Write (MiB/s) | 122.2 | 35.5 | 41.2 | Lustre 3.4x/3.0x | |
| dd 4GiB 単一ストリーム | Write (MiB/s) | 427.5 | 38.5 | 33.4 | Lustre 11.1x/12.8x |
| Read (MiB/s) | 293.3 | 74.8 | 76.6 | Lustre 3.9x/3.8x | |
| メタデータ 5000 files | Create (ops/s) | 939 | 108 | 121 | Lustre 8.7x/7.8x |
| Stat (ops/s) | 505 | 335 | 366 | Lustre 1.5x/1.4x | |
| Delete (ops/s) | 972 | 216 | 245 | Lustre 4.5x/4.0x |
※ 比率は Lustre/S3 Files、Lustre/EFS の順。
iodepth スイープ (numjobs=1, Direct I/O)
| テスト | iodepth | FSx for Lustre | S3 Files | EFS | 最速 |
|---|---|---|---|---|---|
| Seq Read (MiB/s) | 1 | 299 | 71 | 77 | Lustre 4.2x |
| 16 | 478 | 786 | 868 | EFS | |
| 32 | 478 | 1,019 | 1,127 | EFS | |
| 64 | 482 | 1,049 | 1,164 | EFS | |
| Seq Write (MiB/s) | 1 | 426 | 41 | 36 | Lustre 10.4x |
| 16 | 449 | 369 | 321 | Lustre | |
| 32 | 462 | 656 | 596 | S3 Files | |
| 64 | 461 | 1,067 | 1,067 | S3 Files ≒ EFS | |
| Rand 4K Read (IOPS) | 1 | 732 | 270 | 327 | Lustre 2.7x |
| 16 | 2,182 | 4,585 | 5,387 | EFS | |
| 32 | 2,162 | 13,355 | 11,256 | S3 Files | |
| 64 | 2,149 | 27,158 | 22,333 | S3 Files |
小ファイル閾値テスト (numjobs=4, Direct I/O)
| ファイルサイズ | Lustre Read | S3 Files Read | EFS Read | Lustre Write | S3 Files Write | EFS Write |
|---|---|---|---|---|---|---|
| 4 KB (IOPS) | 3,509 | 1,101 | 1,665 | 1,031 | 523 | 681 |
| 64 KB (IOPS) | 2,320 | 855 | 1,265 | 723 | 467 | 506 |
| 128 KB (IOPS) | 2,235 | 649 | 813 | 829 | 255 | 250 |
| 256 KB (IOPS) | 1,360 | 593 | 643 | 412 | 216 | 206 |
| 1 MB (IOPS) | 579 | 38 | 337 | 370 | 145 | 125 |
4. 内容
4.1 検証環境
EC2 インスタンス
| 項目 | 値 |
|---|---|
| インスタンスタイプ | m5.xlarge |
| vCPU | 4 |
| メモリ | 16 GB |
| ネットワーク帯域 | 最大 10 Gbps |
| リージョン | us-east-1 |
| OS | Ubuntu 22.04 LTS (kernel 6.8.0-1050-aws) |
FSx for Lustre
| 項目 | 値 |
|---|---|
| デプロイタイプ | PERSISTENT_2 |
| ストレージ容量 | 1.2 TiB |
| プロビジョニングスループット | 125 MiB/s/TiB (公称値) |
| プロトコル | Lustre (LNET over TCP) |
| マウントオプション | rw, noatime, checksum, flock, lazystatfs |
Amazon S3 Files
| 項目 | 値 |
|---|---|
| マウントヘルパー | amazon-efs-utils v3.0.0 |
| プロトコル | NFS v4.2 (TLS + IAM, efs-proxy 経由) |
| マウントオプション | rw, relatime, vers=4.2, rsize=1048576, wsize=1048576, hard |
| バックエンド S3 | 専用バケット (Lustre と分離) |
Amazon EFS
| 項目 | 値 |
|---|---|
| パフォーマンスモード | General Purpose |
| スループットモード | Elastic |
| マウントヘルパー | amazon-efs-utils v3.0.0 |
| プロトコル | NFS v4.1 (TLS + IAM, efs-proxy 経由) |
| マウントオプション | rw, relatime, vers=4.1, rsize=1048576, wsize=1048576, hard |
| 暗号化 | 有効 (KMS) |
測定方法
FSx for Lustre / S3 Files の測定方法と同一。詳細は別資料「S3 Files vs FSx for Lustre 基本性能比較」を参照。
- データ I/O: Direct I/O (O_DIRECT) + end_fsync=1 (Write)
- dd: oflag=direct / iflag=direct, 3 回平均
- メタデータ: バッファード I/O (シェルスクリプト), 5,000 ファイル, 3 回平均
- iodepth スイープ: libaio, numjobs=1, iodepth 1/16/32/64
4.2 EFS と S3 Files の比較
EFS と S3 Files は同じ EFS 基盤を共有しているため、性能特性の類似度が注目される。
基本テスト
基本テスト (iodepth=1) において、EFS と S3 Files は大半の項目で 10-20% 以内の差に収まった。
| テスト | S3 Files | EFS | 差分 |
|---|---|---|---|
| Seq Write (MiB/s) | 127.3 | 116.6 | S3 Files +9% |
| Seq Read (MiB/s) | 282.7 | 292.3 | EFS +3% |
| Rand 4K Write (IOPS) | 404 | 416 | EFS +3% |
| Rand 4K Read (IOPS) | 1,109 | 1,500 | EFS +35% |
| dd Write (MiB/s) | 38.5 | 33.4 | S3 Files +15% |
| dd Read (MiB/s) | 74.8 | 76.6 | EFS +2% |
| Meta Create (ops/s) | 108 | 121 | EFS +12% |
Rand 4K Read で EFS が 35% 上回ったことが最大の差異。差異の原因は本検証のデータからは特定できないが、S3 Files 固有の内部処理 (S3 との同期管理等) が僅かなオーバーヘッドとなっている可能性がある。
iodepth スイープ
高 iodepth では EFS と S3 Files はともに Lustre を逆転し、類似のスケーリング曲線を描いた。
| iodepth | S3 Files Read (MiB/s) | EFS Read (MiB/s) | 差分 |
|---|---|---|---|
| 1 | 71 | 77 | EFS +8% |
| 16 | 786 | 868 | EFS +10% |
| 32 | 1,019 | 1,127 | EFS +11% |
| 64 | 1,049 | 1,164 | EFS +11% |
EFS が一貫して S3 Files を約 10% 上回る。この差の原因は本検証からは断定できないが、S3 Files 固有の処理が影響している可能性がある。
小ファイル Read
| ファイルサイズ | S3 Files (IOPS) | EFS (IOPS) | 差分 |
|---|---|---|---|
| 4 KB | 1,101 | 1,665 | EFS +51% |
| 64 KB | 855 | 1,265 | EFS +48% |
| 128 KB | 649 | 813 | EFS +25% |
| 256 KB | 593 | 643 | EFS +8% |
| 1 MB | 38 | 337 | EFS +787% |
小ファイルで EFS と S3 Files の差が拡大した。特に 1MB Read では EFS が S3 Files の約 9 倍の IOPS を記録した。S3 Files の 1MB Read (52.9 ms) は S3 直接読み取りパスの影響を受けている可能性が高い一方、EFS はそのようなパス切り替えがなく、全サイズで安定した性能を示した。
4.3 3 サービスの位置づけ
| 観点 | FSx for Lustre | Amazon EFS | Amazon S3 Files |
|---|---|---|---|
| 低 iodepth スループット | 最速 (2-11x) | 中 | 中 |
| 高 iodepth Seq Read | 上限あり (~480 MiB/s) | 最速 (1,164 MiB/s) | 準最速 (1,049 MiB/s) |
| 高 iodepth Rand 4K Read | 上限あり (~2.1K IOPS) | 中 (22K IOPS) | 最速 (27K IOPS) |
| 小ファイル IOPS | 最速 | 中 | 低 |
| メタデータ操作 | 最速 (8.7x) | 中 | 中 |
| S3 データ直接アクセス | DRA 経由 | 不可 | ネイティブ |
| プロビジョニング | 必要 | 不要 (Elastic) | 不要 |
| 最小コスト | ~$174/月 | 従量 | 従量 |
| POSIX 準拠 | 完全 | 完全 | close-to-open |
5. おわりに
5.1 主要な所見
-
EFS と S3 Files の共通基盤: 基本テストの大半で両サービスは 10-20% 以内の差に収まり、AWS が公表する共通の EFS 基盤と整合する結果であった。
-
S3 統合のオーバーヘッド: 小ファイル Read (4KB) で EFS が S3 Files を 51% 上回り、1MB Read では約 9 倍の差が生じた。S3 Files の内部キャッシュ閾値 (128KB) を超えるファイルサイズで S3 直接読み取りパスに切り替わる動作が、EFS との差を拡大させている。
-
高 iodepth での 3 サービスの順位: Seq Read (depth=64) では EFS (1,164) > S3 Files (1,049) > Lustre (482)。Rand 4K Read (depth=64) では S3 Files (27,158) > EFS (22,333) > Lustre (2,149)。テストパターンにより EFS と S3 Files の優劣が入れ替わる。
-
Lustre の位置づけは変わらず: EFS を加えても、低 iodepth・メタデータ・小ファイルでの Lustre の優位は変わらない。
5.2 用途別の推奨
| ワークロード特性 | 推奨 | 根拠 |
|---|---|---|
| 低レイテンシ・HPC | FSx for Lustre | 低 iodepth で 2-11x 優位 |
| S3 データへのファイルアクセス | S3 Files | S3 ネイティブ統合 |
| 汎用 NFS 共有ストレージ | EFS | S3 Files と同等以上の性能 + 完全 POSIX |
| 高並列 Read (AI データローディング) | EFS or S3 Files | iodepth=64 で 1 GiB/s 超 |
| コスト重視・小規模 | EFS or S3 Files | プロビジョニング不要 |
5.3 制約
- 単一 EC2 インスタンス (m5.xlarge) での測定
- Lustre は最小スループット構成 (125 MiB/s/TiB)
- EFS は Elastic Throughput (General Purpose) のみ
- マルチノード・アプリケーション実測は範囲外
一言
こんな記事でも宜しければフォローしてみてください。良いことがあるかも。
@___nix___