Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第13章 InfiniBand および RDMA ネットワークの設定

13.1. InfiniBand および RDMA のテクノロジーについて

InfiniBand とは、2 つの異なることを指します。1 つ目は、InfiniBand ネットワーク用の物理的リンク層プロトコルです。2 つ目は、InfiniBand Verbs API と呼ばれる高レベルのプログラミング API です。InfiniBand Verbs API は、remote direct memory access (RDMA) テクノロジーの実装になります。
RDMA は、いずれのコンピューターのオペレーティングシステムを呼び出さずに、あるコンピューターのメモリーから、別のコンピューターのメモリーへの直接アクセスします。この技術により、CPU の使用量が低いまま、スループットが高く、レイテンシーが低いネットワークが可能になります。これは、並行のコンピューターのクラスターが大量にある場合に特に役に立ちます。
一般的な IP データ転送では、マシン A のアプリケーション X はマシン B のアプリケーション Y にいくつかのデータを送信します。 転送の一環として、マシン B のカーネルは最初にデータを受け取り、パケットヘッダーをデコードし、データがアプリケーション Y に属することを確認し、アプリケーション Y がカーネルに対して読み取りシステムコールを実行するのを待ちます。その後、カーネル自体の内部メモリー領域からアプリケーション Y が提供するバッファーにデータを手動でコピーする必要があります。 このプロセスは、ほとんどのネットワークトラフィックがシステムのメインメモリーバス全体に少なくとも 2 回コピーされる必要があることを意味します(ホストアダプターが DMA を使用してデータをカーネル提供のメモリーバッファーに配置してから 1 回、カーネルがデータをアプリケーションのメモリーバッファーに移動すると再び)。また、コンピューターは、カーネルコンテキストとアプリケーション Y コンテキストの間で切り換えるために複数のコンテキストスイッチを実行する必要があることを意味します。このため、ネットワークトラフィックが高速で流れている場合は、システムにかかる CPU 負荷が非常に高くなり、その他のタスクが遅くなる可能性があります。
RDMA 通信は通常の IP 通信とは異なります。これは、通信プロセスでカーネルの介入を回避し、その過程でネットワーク通信の処理に通常必要となる CPU オーバーヘッドを大幅に削減するためです。RDMA プロトコルを使用すると、ネットワークからいつパケットが届くか、そのパケットをどのアプリケーションが受信すべきか、アプリケーションのメモリースペースのどこにそのパケットが送られるべきかを、マシン内のホストアダプターが判別できます。パケットをカーネルに送信して処理を行い、それからユーザーのアプリケーションメモリーにコピーする代わりに、パケットのコンテンツを直接アプリケーションのバッファーに配置すると、その他の介入は不要になります。ただし、ほとんどの IP ネットワークアプリケーションが構築されている標準の Berkeley Sockets API を使用して実行することはできません。そのため、独自の API、InfiniBand Verbs API、およびアプリケーションは、RDMA テクノロジーを直接使用する前にこの API に移植する必要があります。
Red Hat Enterprise Linux 7 は、InfiniBand ハードウェアおよび InfiniBand Verbs API の両方をサポートします。さらには、InfiniBand Verbs API を、InfiniBand 以外のハードウェアで使用できるようにする追加技術もあります。
  • Internet Wide Area RDMA Protocol (iWARP)
    iWARP は、インターネットプロトコル (IP) ネットワークでの効果的なデータ転送に対してリモートダイレクトメモリーアクセス (RDMA) を実装するコンピューターのネットワークプロトコルです。
  • RoCE (RDMA over Converged Ethernet) プロトコル (後に IBoE (InfiniBand over Ethernet) に名前が変更)
    RoCE は、イーサネットネットワークでリモートダイレクトメモリーアクセス (RDMA) を許可するネットワークプロトコルです。

前提条件

iWARP と RoCE の技術はいずれも、通常の IP ネットワークリンク層が基礎となるテクノロジーであるため、設定の大半は実際には 3章IP ネットワークの設定 で説明されています。 ほとんどの場合、IP ネットワーク機能が適切に設定されると、RDMA 機能はすべて自動で、ハードウェアに適したドライバーがインストールされている限り表示されます。 カーネルドライバーは、常に Red Hat が提供する各カーネルに含まれていますが、マシンのインストール時に InfiniBand パッケージグループが選択されなかった場合は、ユーザー領域ドライバーを手動でインストールする必要があります。
Red Hat Enterprise Linux 7.4 以降、すべての RDMA ユーザー領域ドライバーは rdma-core パッケージに統合されました。サポートされているすべての iWARP、RoCE、または InfiniBand ユーザースペースドライバーをインストールするには、root で次のコマンドを実行します。
~]# yum install libibverbs
Priority Flow Control (PFC)および mlx4 ベースのカードを使用している場合は、/etc/modprobe.d/mlx4.conf を編集して、カードがプラグインするイーサネットスイッチ上の no-drop サービスに設定されたパケット優先度をドライバーに指示し、initramfs を再構築して変更したファイルを追加します。新しい mlx5 ベースのカードは、スイッチと PFC 設定を自動ネゴシエートし、no-drop 優先度を通知するモジュールオプションは必要としません。
Mellanox カードを設定して、イーサネットモードでポートのいずれかまたは両方を使用するには、「Mellanox カードのイーサネット用の設定」を参照してください。
(InfiniBand インストールで通常はインストールされる RDMA パッケージに加えて) これらのドライバーパッケージがインストールされれば、ユーザーは通常の RDMA アプリケーションの大半を利用して、アダプターで RDMA プロトコル通信が行われていることをテスト、確認できます。 ただし、Red Hat Enterprise Linux 7 に含まれているすべてのプログラムが適切に iWARP や RoCE/IBoE デバイスをサポートするわけではありません。 これは特に、iWARP 上の接続確立プロトコルが実際の InfiniBand リンク層接続とは異なるためです。 問題のプログラムが librdmacm 接続管理ライブラリーを使用する場合は、iWARP と InfiniBand の違いをサイレントに処理し、プログラムは機能します。 アプリケーションが独自の接続管理を実行しようとすると、iWARP を明確にサポートする必要があり、これが行われない場合は機能しません。