記事を読む|RDMA原理

DMAとは

DMAの正式名称はDirect Memory Access、つまりダイレクトメモリアクセスです。これは、ペリフェラルによるメモリの読み取りおよび書き込みのプロセスが、CPU の関与なしに直接実行できることを意味します。DMA を使用しない場合の時間を見てみましょう。

DMA コントローラを使用しない I/O デバイスとメモリ間のデータ パス

I/O デバイスが通常のネットワーク カードであると仮定すると、送信されるデータをメモリから取得し、データ パケットを組み立てて物理リンクに送信するには、ネットワーク カードは CPU にその情報を通知する必要があります。バスを介して独自のデータをリクエストします。次に、CPU はメモリ バッファ内のデータを自身の内部レジスタにコピーし、それから I/O デバイスのストレージ スペースにコピーします。データ量が比較的大きい場合、CPU は長時間データの移動で忙しくなり、他のタスクに専念できなくなります。

CPU の主な仕事は計算であり、データのコピーではありません。これは計算能力の無駄です。CPU を「軽量化」し、より意味のある作業に投入するために、人々は後に DMA メカニズムを設計しました。

DMA コントローラを使用した I/O デバイスとメモリ間のデータ パス

バス上に別の DMA コントローラがあることがわかります。これは、メモリの読み書きに特別に使用されるデバイスです。これにより、ネットワーク カードがメモリからデータをコピーする必要がある場合、一部の必要な制御コマンドを除いて、データ コピー プロセス全体が DMA コントローラによって完了します。このプロセスは CPU コピーと同じですが、今回はメモリ内のデータがバスを介して DMA コントローラの内部レジスタにコピーされ、その後 I/O デバイスのストレージ空間にコピーされます。このプロセスの開始と終了に注意を払うことに加えて、CPU は他の時間に他のことを行うことができます。

DMA コントローラは通常、I/O デバイスと一緒にあります。つまり、ネットワーク カードには、データの送受信を担当するモジュールと DMA モジュールの両方が含まれています。

RDMAとは何ですか

RDMA (Remote Direct Memory Access) とは、リモート ダイレクト アドレス アクセスを意味し、RDMA を介して、ローカル ノードはリモート ノードのメモリに「直接」アクセスできます。いわゆるダイレクトとは、ローカル メモリにアクセスするのと同じように、従来のイーサネットの複雑な TCP/IP ネットワーク プロトコル スタックをバイパスすることによって、リモート メモリの読み取りと書き込みができることを意味します。このプロセスはピアによって認識されず、読み取りおよび書き込みのほとんどが行われます。書き込みプロセス 作業はソフトウェアではなくハードウェアによって実行されます。

このプロセスを直観的に理解するために、次の 2 つの図を見てください (図内の矢印は説明のみを目的としており、実際の論理的または物理的な関係を表すものではありません)。

従来のネットワークでは、「ノード A がノード B にメッセージを送信する」ということは、実際に行うことは「ノード A のメモリ内のデータをネットワーク リンクを介してノード B のメモリに移動する」ことであり、このプロセスは、送信するかどうかに関係なく、受信 各セグメントでは、ネットワーク カードの制御、割り込みの処理、パケットのカプセル化と分析などを含む、CPU のコマンドと制御が必要です。

メモリユーザー空間にある上図の左側のノードのデータは、CPUによってカーネル空間のバッファにコピーされる必要があり、ネットワークカードからアクセスできるようになります。この間、データは渡されます。ソフトウェアによって実装された TCP/IP プロトコル スタックに加えて、TCP ヘッダー、IP ヘッダーなどのさまざまなレイヤー ヘッダーおよびチェック コードを経由します。ネットワーク カードは、カーネル内のデータを DMA 経由でネットワーク カード内のバッファにコピーし、処理後に物理リンクを介してピア エンドに送信します。

ピアエンドはデータを受信すると、逆のプロセスを実行します。つまり、ネットワーク カードの内部ストレージ スペースから DMA 経由でメモリ カーネル スペースのバッファにデータをコピーし、CPU が TCP/IP 経由でデータを分析します。プロトコルスタックを作成し、データを取得してユーザー空間にコピーします。

DMA テクノロジーを使用しても、上記のプロセスは依然として CPU に強く依存していることがわかります。

RDMA テクノロジーを使用すると、このプロセスは次の概略図として簡単に表現できます。

同様に、ローカル メモリ上のデータがピア メモリにコピーされますが、RDMA テクノロジを使用すると、両端の CPU はデータ送信プロセスにほとんど参加する必要がなくなります (コントロール プレーンにのみ参加します)。ローカル側のネットワーク カードは、DMA によってメモリのユーザー空間から内部ストレージ空間にデータを直接コピーし、ハードウェアが各層のパケットを組み立てて、物理リンクを介してピア ネットワーク カードに送信します。データを受信した後、相手側の RDMA ネットワーク カードは各層のヘッダーとチェック コードを取り除き、DMA 経由でデータをユーザー空間メモリに直接コピーします。

RDMAの利点

RDMA は主にハイ パフォーマンス コンピューティング (HPC) および大規模データ センターの分野で使用されており、機器は通常のイーサネット カードよりもはるかに高価です (たとえば、Mellanox の Connext-X 5 100Gb PCIe ネットワーク カードの市場価格は4,000元以上)。RDMA は、使用シナリオと価格の理由から、一般の開発者や消費者からは遠く離れていますが、現在、主に一部の大手インターネット企業によって導入および使用されています。

RDMA テクノロジーが上記のシナリオに適用できるのはなぜですか? これには次のような特徴が含まれます。

  • 0 コピー: ユーザー空間とカーネル空間の間でデータを往復コピーする必要がないことを意味します。

Linux などのオペレーティング システムではメモリがユーザー空間とカーネル空間に分割されているため、従来のソケット通信プロセスでは、CPU はメモリ内でデータを何度もコピーする必要があります。RDMA テクノロジーを使用すると、リモート エンドの登録済みメモリ領域に直接アクセスできます。356

  • カーネル バイパス: IO (データ) プロセスがカーネルをバイパスできることを意味します。つまり、ユーザー層でデータを準備し、ハードウェアに送受信を通知できることを意味します。システムコールとコンテキストスイッチのオーバーヘッドが回避されます。

上の図 (元の図 [1]) は、「0 コピー」と「カーネル バイパス」の意味をよく説明しています。上部と下部はそれぞれソケットベースと RDMA ベースの 1 回の送受信プロセスであり、左側と右側はそれぞれ 2 つのノードです。ソフトウェアのソケット プロセスに追加のコピー アクションがあることがはっきりとわかります。RDMA はカーネルをバイパスし、メモリのコピーも削減し、ユーザー層とハードウェアの間でデータを直接転送できます。

  • CPU アンロード: リモート ノードの CPU が通信に参加しなくても、メモリの読み書きができることを意味します (もちろん、リモート エンドでメモリの特定のセグメントにアクセスするには「キー」を保持する必要があります)。実際にメッセージをカプセル化し、分析はハードウェアで行われます。従来のイーサネット通信では、各層でのメッセージの解析に双方の CPU が参加する必要があり、データ量が多くやり取りが頻繁な場合、CPU のオーバーヘッドが大きくなり、CPU コンピューティングが占有されます。リソースはもっと価値のあることを行うことだったかもしれません。

通信分野で出現率が最も高い2つの性能指標は「帯域幅」と「遅延」です。簡単に言えば、いわゆる帯域幅は単位時間あたりに送信できるデータの量を指し、遅延はデータがローカル エンドから送信されてから反対側のエンドで受信されるまでにかかる時間を指します。上記の特性により、RDMA テクノロジーは従来のイーサネットと比較して、より高い帯域幅とより低い遅延を同時に実現するため、大量のデータの相互作用などの帯域幅が重要なシナリオや、複数のネットワークでの遅延が重要なシナリオで使用されます。コンピューティング ノード間のデータ同期のシナリオでその役割を果たすことができます。

プロトコル

RDMA 自体は、Infiniband (IB)、RDMA over Converged Ethernet (RoCE)、Internet Wide Area RDMA Protocol (iWARP) などのテクノロジー、特定のプロトコル レベルを指します。3 つのプロトコルはすべて RDMA 標準に準拠し、同じ上位層インターフェイスを使用しますが、異なるレベルでいくつかの違いがあります。

上の図 [2] は、いくつかの一般的な RDMA テクノロジーのプロトコル レベルを非常に明確に比較しています。

インフィニバンド

2000 年に IBTA (InfiniBand Trade Association) によって提案された IB プロトコルは、当然のコアであり、リンク層からトランスポート層 (従来の OSI 7 層モデルのトランスポート層ではなく、ただし、既存のイーサネットと互換性がないため、企業が導入する場合は、IB をサポートするネットワーク カードに加えて、サポートするスイッチング機器を再購入する必要があります。

RoCE

RoCE は完全な英語名から、イーサネット リンク層に基づくプロトコルであることがわかります。v1 バージョンのネットワーク層は依然として IB 仕様を使用していますが、v2 はネットワーク層として UDP+IP を使用しているため、データ パケットはルーティングも可能です。RoCE は、IB のメッセージを送受信用のイーサネット パケットにカプセル化する、IB の「低コスト ソリューション」とみなすことができます。RoCE v2 はイーサネット スイッチング デバイスを使用できるため、現在企業で広く使用されていますが、同じシナリオでは IB と比較してパフォーマンスが若干低下します。

アイワープ

iWARP プロトコルは、TCP に基づいて IETF によって提案されました。TCP は信頼性の高い接続指向プロトコルであるため、損失の多いネットワーク シナリオ (パケット損失が頻繁に発生する可能性があることは理解できます) に直面して、iWARP が RoCE v2 および IB よりも強力になるからです。信頼性の向上は、大規模なネットワークでも明らかな利点をもたらします。ただし、多数の TCP 接続はメモリ リソースを大量に消費し、また TCP の複雑なフロー制御メカニズムによりパフォーマンスの問題が発生するため、パフォーマンスの点では iWARP は UDP の RoCE v2 や IB よりも劣ります。

ソフトウェアによって実装される RoCE および iWARP プロトコルもありますが、上記のプロトコルは実際の商用利用には特別なハードウェア (ネットワーク カード) のサポートが必要であることに注意してください。

iWARP 自体は Infiniband から直接開発されたものではありませんが、Infiniband テクノロジーのいくつかの設計思想を継承しています。これら 3 つのプロトコル間の関係を次の図に示します。

  電車による情報: Linux カーネル ソース コード技術学習ルート + ビデオ チュートリアル カーネル ソース コード

電車で学ぶ: Linux カーネル ソース コード メモリ チューニング ファイル システム プロセス管理 デバイス ドライバー/ネットワーク プロトコル スタック

プレーヤー

標準/エコロジー組織

IB 協定に関して言えば、IBTA と OFA という 2 つの主要な組織について言及する必要があります。

IBTA[3]

1999 年に設立され、Infiniband プロトコル標準の策定と維持を担当しています。IBTA は各メーカーから独立しており、技術活動を後援しリソース共有を促進することで業界全体を統合し、オンライン コミュニケーション、マーケティング、オフライン活動を通じて IB と RoCE を積極的に推進します。

IBTA は、商用 IB および RoCE 機器のプロトコル標準への準拠と相互運用性のテストと認証を実施します。多くの大手 IT メーカーで構成される委員会が主導し、主なメンバーには Broadcom、HPE、IBM、Intel、Mellanox、Microsoft が含まれます。 IBTAの会員でもあります。

OFA[4]

2004 年に設立された非営利団体で、ベンダーに依存しないオープンソースのクロスプラットフォーム Infiniband プロトコル スタックの開発、テスト、認証、サポート、配布を担当し、2010 年に RoCE のサポートを開始しました。これは、RDMA/カーネル バイパス アプリケーションをサポートするために使用される OFED (OpenFabrics Enterprise Distribution) ソフトウェア スタックを担当し、主流のソフトウェアおよびハードウェアとの互換性と使いやすさを保証します。OFED ソフトウェア スタックには、ドライバー、カーネル、ミドルウェア、API が含まれています。

上記 2 つの組織は協力関係にあり、IBTA は主に Infiniband プロトコル標準の開発、維持、強化を担当し、OFA は Infiniband プロトコルおよび上位層アプリケーション API の開発、維持を担当します。

開発コミュニティ

Linuxコミュニティ

Linux カーネルの RDMA サブシステムは比較的活発で、一部のプロトコルの詳細が頻繁に議論され、フレームワークが頻繁に変更されます。さらに、Huawei や Mellanox などの一部のメーカーはドライバー コードを頻繁に変更します。

電子メール購読: http://vger.kernel.org/vger-lists.html#linux-rdma

コードは、フレームワークのコア コードと各メーカーのドライバー コードを含む、kernel drivers/infiniband/ ディレクトリにあります。

コードリポジトリ: https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git/

RDMAコミュニティ

上位レベルのユーザー向けに、IB は Socket - libibverbs に似た一連のインターフェイスを提供し、上記の 3 つのプロトコルをすべて使用できます。プロトコル、API ドキュメント、サンプル プログラムを参照することで、簡単にデモを作成できます。この列の RDMA コミュニティは、特にユーザー モード コミュニティを指し、github 上のウェアハウス名は linux-rdma です。

これには主に 2 つのサブ倉庫が含まれます。

  • rdmaコア

さまざまなベンダーのユーザー モード コア コード、API、ドキュメント、およびユーザー モード ドライバー。

  • 完璧な

RDMA パフォーマンスをテストするための強力なツール。

コードウェアハウス: https://github.com/linux-rdma/

UCX[5]

UCX は、RDMA などのテクノロジに基づいて構築されたデータ処理およびハイ パフォーマンス コンピューティングのための通信フレームワークであり、RDMA はその基礎となるコアの 1 つです。これは、アプリケーションと RDMA API の間のミドルウェアとして理解でき、上位レベルのユーザーが開発しやすいインターフェイスをカプセル化します。

筆者はあまり詳しくなく、業界のいくつかの企業がUCXをベースにしたアプリケーションを開発しているということしか知りません。

コードウェアハウス: https://github.com/openucx/ucx

ハードウェアメーカー

IB 関連のハードウェアを設計・製造するメーカーは、Mellanox、Huawei、Qlogic の IB 技術を買収した Intel、Broadcom、Marvell、富士通など、数多くあります。ここでは 1 つずつ展開するのではなく、Mellanox と Huawei について簡単に説明します。

  • メラノックス

IB 分野のリーダーである Mellanox は、プロトコル標準の策定、ソフトウェアとハ​​ードウェアの開発、エコロジー構築に携わっており、コミュニティと標準の策定において最大の発言力を持っています。現在、最新世代のネットワーク カードは、200Gb/s をサポートする ConnextX-6 シリーズです。

  • ファーウェイ

昨年初めに発売されたKunpeng 920チップはすでに100Gb/sのRoCEプロトコルをサポートしており、技術的には中国で主導的な地位にある。しかし、ソフトウェア、ハードウェア、影響力の点でメラノックスからの道のりはまだ長く、ファーウェイはできるだけ早く兄貴に追いつくことができると信じています。

ユーザー

Microsoft、IBM、国内のAlibaba、JD.comなどがRDMAを採用しており、多くの大手IT企業が予備開発やテストを行っている。データ センターやハイ パフォーマンス コンピューティングのシナリオでは、RDMA が従来のネットワークに取って代わるのが一般的な傾向です。著者は市場とあまり接点がないため、より詳細なアプリケーション情報を提供することはできません。

原作者: サヴィル

 

 

おすすめ

転載: blog.csdn.net/youzhangjing_/article/details/132174782
おすすめ