9.3. Base RDMA サブシステムの設定

9.3.1. RDMA パッケージのインストール

rdma パッケージは、デフォルトでインストールされるパッケージ一式には含まれていません。インストール中に InfiniBand パッケージグループが選択されなかった場合は、rdma パッケージ (上記のセクションで記載されている他の多くのパッケージも) は、初期のインストール完了後にインストールすることができます。マシンのインストール時にインストールされず、後で手動でインストールされた場合は、完全に機能するために dracut を使って initramfs イメージを再構築する必要があります。これを行うには、root で以下のコマンドを実行します。
~]# yum install rdma
dracut -f
rdma サービスは自動で開始されます。InfiniBand でも iWARP でも RoCE/IBoERDMA でも、RDMA 対応ハードウェアが検出されると、udevsystemdrdma サービスを開始するよう指示します。ユーザーが rdma サービスを有効にする必要はありませんが、常時有効にしたい場合は、そうすることができます。これを行うには、以下のコマンドを実行します。
~]# systemctl enable rdma

9.3.2. rdma.conf ファイルの設定

rdma サービスは /etc/rdma/rdma.conf を読み込んで、管理者がデフォルトで読み込みたいカーネルレベルとユーザーレベルの RDMA プロトコルを判別します。このファイルを編集すると、様々なドライバーを有効、無効にできます。
以下のドライバーが有効、無効にできます。
  • IPoIBIP ネットワークエミュレーション層で、InfiniBand ネットワークでの IP アプリケーションの実行を可能にします。
  • SRP — SCSI 要求プロトコルです。マシン上の SRP プロトコル経由でエクスポートされたリモートドライブまたはドライブアレイをまるでローカルのハードディスク上にあるかのようにマシンにマウントできるようになります。
  • SRPTSRP プロトコルのターゲットモードもしくはサーバーモードです。これは、他のマシンにドライブもしくはドライブアレイをエクスポートするために必要なカーネルサポートを読み込みます。他のマシンは、これらをまるでローカル上にあるかのようにマウントします。デバイスが実際にエクスポートされる前に、ターゲットモードのサポートの設定が必要になります。詳細は、targetd および targetcli パッケージの資料を参照してください。
  • ISER — Linux カーネルの iSCSI 層全般用の低レベルのドライバーで、iSCSI デバイスに InfiniBand ネットワークでのトランスポートを提供します。
  • RDS — Linux カーネル内の Reliable Datagram Service です。Red Hat Enterprise Linux 7 カーネル内では有効にされないため、読み込むことができません。

9.3.3. 70-persistent-ipoib.rules の使用

rdma パッケージは、/etc/udev.d/rules.d/70-persistent-ipoib.rules ファイルを提供します。この udev rules ファイルは、IPoIB デバイスを (ib0ib1 などの) デフォルト名からより記述的な名前に変更するために使用されます。デバイス名を変更するには、このファイルの編集が必要になります。まず、名前を変更する デバイスの GUID アドレスを見つけます。
~]$ ip link show ib0
8: ib0: >BROADCAST,MULTICAST,UP,LOWER_UP< mtu 65520 qdisc pfifo_fast state UP mode DEFAULT qlen 256
    link/infiniband 80:00:02:00:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:cb:a1 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
link/infiniband の直後には、IPoIB インターフェースの 20 バイトのハードウェアアドレスがあります。新規の名前作成に必要なのは、上記で太字表示となっている最後の 8 バイトのみです。ユーザーは好みに合わせて自由に命名スキームを作成することができます。たとえば、mlx4 デバイスが ib0 サブネットファブリックに接続されている場合、mlx4_ib0 のような device_fabric 命名規則を使用します。唯一推奨されないのは、ib0ib1 といった標準名を使用することです。これらの名前は、カーネルが割り当てる自動的な名前と競合する場合があるからです。次に、rules ファイルにエントリーを追加します。既存の例を rules ファイルからコピーして、ATTR{address} エントリー内の 8 バイトを名前を変更するデバイスからの強調表示された 8 バイトで置き換えます。また、新規の名前を NAME フィールドに記入します。

9.3.4. ユーザーのメモリーロック制限解除

RDMA 通信では、コンピューター内の物理的メモリーを固定 (つまり、コンピューター全体で利用可能なメモリーが不足した場合に、カーネルはそのメモリーをページングファイルにスワップすることができない) する必要があります。メモリーの固定は通常、非常に限られた権限が必要となる操作です。root 以外のユーザーによる 大型 RDMA アプリケーションの実行を可能にするには、非 root ユーザーがシステムで固定を許されるメモリー量を増やす必要があります。これを行うには、/etc/security/limits.d/ ディレクトリー内に以下のようなコンテンツのファイルを追加します。
~]$ more /etc/security/limits.d/rdma.conf
# configuration for rdma tuning
*       soft    memlock         unlimited
*       hard    memlock         unlimited
# rdma tuning end

9.3.5. Mellanox カードのイーサネット用の設定

Mellanox の特定のハードウェアは、InfiniBand とイーサネットモードのいずれでも実行可能です。これらのカードは通常、InfiniBand がデフォルトとなっています。ユーザーがこれをイーサネットモードにすることもできます。現在このモードがサポートされているのは、ConnectX ファミリーのハードウェア (これは mlx4 ドライバーを使用) のみです。このモードに設定するには、/etc/rdma/mlx4.conf ファイルにある指示にしたがい、当該ハードウェアに適切な PCI デバイス ID を見つけます。そして、そのデバイス ID と要求されるポートタイプを使用してファイル内に 1 行作成します。その後は initramfs を再構築して、更新されたポート設定が initramfs にコピーされたことを確認します。
ポートタイプを設定し、1 つもしくは両方のポートがイーサネットに設定されたら、ログに以下のメッセージが表示される場合があります。 mlx4_core 0000:05:00.0: Requested port type for port 1 is not supported on this HCA これは正常なことで、操作に影響は出ません。ポートタイプを設定するスクリプトには、ドライバーがいつポート 2 を内部で要求されたタイプに切り替えたかを知るすべがありません。このため、スクリプトがポート 2 の切り替えを要求してから切り替え操作が完了するまでの間は、ポート 1 を異なるタイプに設定する試行は拒否されます。スクリプトはコマンドが成功するか、ポートスイッチが完了されないことを示すタイムアウトになるまで再試行します。