ますますデータが生まれて増え続ける中、リニアなパフォーマンス スケーリングはスケールアウト ストレージの絶対条件となっています。ストレージ ネットワークは車の道路システムのようなもので、道路がスピードに合わせて作られていなければ、車の潜在的なスピードは意味がありません。フェラーリも、障害物だらけの舗装されていない道路ではスピードが出せません。
スケールアウト ストレージの性能は、ストレージ ノードを接続するイーサネット ファブリックによって妨げられることがあります。NVIDIA アクセラレーテッド イーサネットは、パフォーマンスのボトルネックを取り除き、一般的なアプリケーション、特に AI や機械学習に対して最大のストレージ パフォーマンスを発揮します。
スケールアウト ストレージには強力なネットワークが必要
世界中で毎秒 54,000 枚の写真が撮影されています。あなたがこの記事を読む頃には、この数字はさらに大きくなっているでしょう。どのようなビジネスであれ、保存や分析が必要な大量のデータを抱えている可能性は高く、その量は日々増加しています。
より大きなストレージ ファイラーを使用する従来のスケールアップ方式は、容量と性能の両方でリニアにスケールするストレージを提供するスケールアウト方式に取って代わられました。
スケールアウト ストレージ、または分散ストレージでは、複数の小さなノードが、1 つの論理ユニットとして動作するように構成されて接続され、1 つのファイルやオブジェクトを多くのノードに分散させることができます。
より大きな規模が必要になったときには、ストレージ ノードを簡単に追加して、ストレージ容量と性能の両方を向上させることができます。これは、従来の企業向けストレージ ベンダーのソリューションにも、ソフトウェアとハードウェアを別々に調達するソフトウェアデファインドなソリューションにも当てはまります。
分散ストレージは柔軟なスケーリングとコスト効率を可能にする一方、ストレージ ノードを接続する高性能なネットワークが必要になります。多くのデータ センター スイッチは、ストレージ特有のトラフィック特性に適しておらず、実際には、スケールアウト ストレージ ソリューションの性能を低下させる場合もあります。
ストレージ トラフィックと従来のトラフィックとの違い
多くのユース ケースでは、ネットワーク トラフィックは一貫性があり、均質であるため、従来のイーサネットで十分です。しかし、ストレージ デバイスから発生するトラフィックは、以下のような問題を引き起こす可能性があります。
ネットワーク ストレス
現在のストレージ ソリューションは、NVMe や PCIe Gen 4 (間もなく PCIe Gen 5) といった、より高速な SSD やストレージ インターフェイスの恩恵を受けています。
輻輳
ストレージ ファブリックが飽和状態になると、高速道路で交通量が多すぎるときの道路の混雑のように、ネットワークの混雑が避けられなくなります。ネットワークの輻輳は、各ストレージ ノードが高速データな配信を提供することが期待されるため、スケールアウト ストレージでは特に問題となります。しかし、輻輳が発生すると、多くのデータセンター スイッチには公平性の問題が発生し、一部のノードが他のノードよりはるかに遅くなります。1 つのファイルやオブジェクトは通常多くのノードにまたがっているため、1 つのノードが遅くなるとクラスター全体が遅くなるのです。
バースト トラフィック
ほとんどのストレージ ワークロードは急激で、集中的なデータ転送を発生させ、短時間に大量の帯域幅を繰り返し必要とします。そのような場合、ネットワーク スイッチは、一時的なバーストが終わるまでそのバッファを使ってバーストを吸収し、パケット損失を防がなければなりません。さもなければ、パケット損失によってデータの再送が必要となり、アプリケーションのパフォーマンスが著しく低下してしまいます。
ストレージの Jumbo Frame
従来のデータ センター ネットワーク トラフィックでは、1.5 KB の最大パケット サイズ (MTU) を使用していました。スケールアウト ストレージ ノードでは、9 KB の「Jumbo Frame」を使用することで、CPU 処理のオーバーヘッドを削減しながらスループットを向上させることができます。汎用スイッチ ASIC で構築されたデータ センター スイッチの多くは、Jumbo Frame では性能が低下したり、予測不能な動作をしたりします。
低遅延
ストレージの IOPS が改善された方法の 1 つには、フラッシュベースのメディアでの読み取り/書き込み操作の遅延が桁違いに短縮されたことにあります。こうした性能向上はコストがかかるものですが、特に過剰なバッファが原因となってネットワークが高い遅延をもたらすことで、その性能向上は失われる可能性があります。
トレーニングも推論も、GPU プロセッサをフル稼働させるために、十分な量のデータに高速にアクセスする必要があります。トレーニング中は、モデルの精度を向上させるために、すべてのノードで書き込み操作が実行されます。これによりバーストが発生するため、スイッチは輻輳を効果的に処理することが必須となります。最後に、ストレージの遅延を軽減することで、GPU は演算タスクをより効率的に処理できるようになります。
ASIC がストレージ トラフィックに最適でない理由
ほとんどのデータ センター スイッチは、従来のデータ トラフィック パターンとパケット サイズにコスト的に最適化された汎用スイッチ ASIC を使用して構築されています。帯域幅の目標を達成しながらコストを低く抑えるために、イーサネット スイッチ チップ ベンダーは、スプリット バッファ アーキテクチャを使用することで公平性を犠牲にしました。
すべてのスイッチには、トラフィックのバーストを吸収し、輻輳が発生したときのパケット損失を防ぐためのバッファがあります。一般的なアプローチは、多くのポートで共有されるバッファを持つことです。しかし、すべての共有バッファが同じというわけではなく、さまざまなバッファ アーキテクチャがあります。
コモディティ スイッチは完全な共有バッファを持たず、Ingress 共有バッファか Egress 共有バッファを使います。
Ingress 共有バッファでは、受信ポートのグループと特定のメモリ スライスとの間に静的なマッピングがあります。これらのポートは、割り当てられたスライス内のメモリのみを使用することができ、バッファ全体を使用することはできません。バッファの残りが使用可能で、誰も使用していない場合でも使用できません。
Egress 共有バッファでは、マッピングは送信ポート グループと特定のバッファ メモリ スライスとの間で行われます。この場合も、各グループの Egress ポートは、バッファ全体ではなく、割り当てられたバッファ スライスのみを使用することができます。
これら 2 つのアーキテクチャでは、同じメモリ スライス内に留まるフローは、メモリ スライス間を移動するフローのようには動作しません。多くのフローが同じバッファを持つポートを使用する場合、それらのポートでは遅延が高くなり、スループットが低下しますが、バッファの他のスライスを使用するトラフィックは高い性能を享受できます。
ストレージの性能は、ストレージ トラフィック (および他のトラフィック) がどのポートを使用しているか、そしてそれらのポートのバッファ スライスがどの程度ビジーであるかに依存します。このため、スプリット バッファを使用するスイッチでは、公平性、予測可能性、マイクロバーストの吸収に関する問題がよく発生します。
ディープバッファ スイッチがストレージに最適でない理由
ディープバッファ スイッチは通常、より多くのバッファ (MB ではなく GB) を提供するスイッチを指します。ディープバッファ スイッチは、ネットワーク速度の不一致やインキャストが発生した場合に、大きなトラフィック バーストを吸収して保持することができるため、ルーターとして使用されることが多々あります。
しかし、スケールアウト ストレージを含むほとんどのデータセンター アプリケーションでは、ディープバッファ スイッチは以下の理由で性能にマイナスの影響を与えます:
ジョブ完了時間
並列ファイル システムでは、最もレスポンスの遅いストレージ ノードがファイルの取得に要する時間を決定します。スライスされたオンチップ バッファを持つ汎用スイッチ ASIC とは異なり、ディープバッファ スイッチはオンチップとオフチップの両方のバッファを持ち、それらはすべてスライスされており、完全に共有されているわけではありません。
フローがスイッチを出るまでに、どれだけの経路があるか考えてみましょう。1 つのオンチップ メモリ スライス内に留まったり (最速)、オンチップ メモリ スライス間を移動したり (低速)、オンチップ メモリ スライスとオフチップ メモリ スライス間を移動したり (超低速) します。
これらのフローはすべて挙動が異なるため、ストレージ トラフィックの公平性と予測可能性の問題が発生します。これらの問題は 1 つまたは複数のノードの速度を低下させるため、ジョブの完了時間に悪影響を与え、分散ストレージ クラスタ全体の速度を低下させます。
遅延
スイッチ バッファが大きいほど、各パケットが通過しなければならないキューは長くなり、遅延が大きくなります。テストされたディープバッファ スイッチの平均ポート間遅延は、500 マイクロ秒以上でした。同世代の完全な共有バッファ スイッチと比較すると、NVIDIA Spectrum 1 の遅延は、わずか 0.3 マイクロ秒です。パケットの切り替え/ルーティングに必要なのは、マイクロ秒ではなくナノ秒です。
ディープバッファの遅延は 1,000 倍高いです。これは輻輳が発生した時だけでは、と思われるかもしれません。いいえ。輻輳が発生すると、ディープバッファの遅延はもっと高くなります。実際には、最大 20 ミリ秒、つまり 5 万倍高くなります。500 マイクロ秒の遅延は、データ センター間のルーターでは問題ないかもしれませんが、データ センター内においては、フラッシュ ストレージの性能にとって致命的です。
電力とコスト
ディープバッファ スイッチは、アイドリング状態でも数百ワットの電力を必要とするため、継続的な運用コストが高くなります。ディープバッファ スイッチの初期購入コストもはるかに高く、性能が優れていれば正当化されるかもしれませんが、実際のテストではその逆であることが証明されています。
不適切なネットワーク スイッチを選択すると、ストレージのワークロードが著しく遅くなり、高価な高速ストレージがより安価で低速なストレージのように動作してしまいます。
NVIDIA Spectrum なら、CapEx (資産) と OpEx (費用) の両方を削減することができます。ワットを、ラック内の他の目的にも使用できます。
ストレージに最適化された NVIDIA Spectrum スイッチ
汎用スイッチ ASIC では、フローは同じメモリ スライスに留まったり、メモリ スライス間を移動したりします。
NVIDIA Spectrum スイッチでは、バッファが完全に共有されているため、すべてのフローが同じ動作をします。このアーキテクチャの価値は、最大限のバースト吸収能力と、最適で公正かつ予測可能な性能です。スイッチを通過するすべてのトラフィック フローは、どの Ingress ポートと Egress ポートを使用しているかに関係なく、同じ扱いを受け、一般的に同じ良好な性能を享受します。
ディープバッファ スイッチと NVIDIA Spectrum のベンチマーク
最初のケースは、一般的なストレージ ベンチマークの FIO ツールを使用し、バックグラウンド トラフィックの実行中に、2 つのイニシエーターから 1 つのターゲットへの書き込み操作を行う典型的なストレージ シナリオです。
チームは FIO ジョブが完了するまでの所要時間を計測しました (短いほど良い)。ディープバッファ スイッチを使用した場合、FIO ジョブは 87 秒かかりました。NVIDIA Spectrum スイッチでは、ジョブは 40% 速く実行され、わずか 51 秒で完了しました。
ディープバッファ スイッチは遅延を大幅に増加させ、ストレージを遅くし、アプリケーションの性能を低下させます。しかし、遅延はどこまで高くなるのでしょう?
2 つ目のケースとして、チームはディープバッファ スイッチを採用し、さまざまな輻輳のユースケースにおいて遅延がどのような影響を受けるかをテストしました。最大バッファ占有率は、バッファ サイズ全体のわずか 10% 程度です。
図 2 の左のグラフからは、2 つの重要なインサイトが得られます。1 つ目、ディープバッファ スイッチの遅延は Spectrum スイッチの 50,000 倍です (Spectrum がわずか 300 ナノ秒であるのに対し、ディープバッファ スイッチは 2-19 ミリ秒)。
2 つ目に、バッファ占有率と待ち時間の間に線形的な依存関係があることが明らかです。言い換えれば、占有バッファが大きいほど遅延が大きくなることがテストで証明されました。
それを理解した上で、図 2 の右のグラフは、ディープバッファ ASIC (Jericho 1、Jericho 2、Ramon など) ごとの最大遅延を推定しています。このような非常に高い遅延は、一般的なデータ センター アプリケーションや、特に高速ストレージ ソリューションには適していません。
3 つ目のケースでは、チームは 2 台の Windows マシンを使い、それぞれのファイルを同じ対象ストレージに同時にコピーしました。
ディープバッファ スイッチの場合、一方の Windows マシンの帯域幅はもう一方のマシンの 3 倍でした (290MBps に対して 830MBps)。Spectrum スイッチでは、各マシンの帯域幅は 584 MBps (予想通り 50%) でした。
実際のテストでは、ディープバッファ スイッチは、パケットの吸収やドロップの防止など、データ センターのアプリケーションに良い影響を与えないことが示されました。
ディープバッファ スイッチは長距離接続や WAN 接続には必要かもしれませんが、データ センター アプリケーションには最適ではなく、特にこのユース ケースのようにワークロードを 2 ノード以上に拡張した場合には、マイナスの影響が出ます。
これら 3 つのユース ケースは、ディープバッファ スイッチが AI/ML やストレージ ワークロードにマイナスな影響を与える一方で、Spectrum スイッチが最大限の性能を提供する理由を実証しています。
まとめ
NVIDIA Spectrum イーサネット スイッチは、AI/ML やストレージのワークロード向けに設計されており、スプリット バッファやディープ バッファを備えたスイッチよりも優れた性能を発揮します。輻輳をうまく処理し、パケット損失を防ぎ、Jumbo Frame (ストレージに推奨) でより優れた性能を発揮します。NVIDIA Spectrum Ethernet スイッチは、一貫して低いネットワーク遅延で、全体的に優れたアプリケーション性能を提供します。
NVIDIA Spectrum イーサネット スイッチの詳細をご覧ください。NVIDIA 開発者フォーラムで、ネットワーク ストレージについてさらに深く掘り下げることもできます。
関連情報
- GTC セッション: Connect with the Experts: Inter-GPU Communication Techniques and Libraries (Spring 2023)
- SDK: Magnum IO
- SDK: Switch SDK
- SDK: GPUDirect Storage
- ウェビナー: Accelerating Trade Cycles with Low-Latency NVIDIA Networking
- ウェビナー: Accelerated performance for AI, Cloud, Storage, and Security with NVIDIA Spectrum-3
翻訳に関する免責事項
この記事は、「Maximizing Network Performance for Storage with NVIDIA Spectrum Ethernet」の抄訳で、お客様の利便性のために機械翻訳によって翻訳されたものです。NVIDIA では、翻訳の正確さを期すために注意を払っておりますが、翻訳の正確性については保証いたしません。翻訳された記事の内容の正確性に関して疑問が生じた場合は、原典である英語の記事を参照してください。