Linux での RoCEv2 を使用した NVMeoF の構成

Linux 上で RoCE v2 を使用するファブリック(NVMeoF)を介して NVMe を使用する際のガイドライン

一般的なガイドラインと制限事項

  • Cisco では、UCS ハードウェアとソフトウェアの互換性をチェックして、NVMeoF のサポートを判断することを推奨します。NVMeoF は、Cisco UCS B シリーズ、C シリーズ、および X シリーズのサーバでサポートされています。

  • RoCE v2 を使用した RDMA 上の NVMe は、Cisco UCS VIC 1400、VIC 14000、および VIC 15000 シリーズのアダプタでサポートされています。

  • RoCE v2 インターフェイスを作成する際には、Cisco Intersight が提供する Linux-NVMe-RoCE アダプタ ポリシーを使用します。

  • Ethernet Adapter ポリシーでは、キュー ペア、メモリ領域、リソース グループ、および優先度の設定値を、Cisco が提供するデフォルト値以外に変更しないでください。キュー ペア、メモリ領域、リソース グループ、および優先度の設定が異なると、NVMeoF の機能が保証されない可能性があります。

  • RoCE v2 インターフェイスを構成する場合は、Cisco.com からダウンロードした enic と enic_rdma の両方のバイナリドライバを使用して、一致する enic と enic_rdma ドライバのセットをインストールします。inbox enic ドライバを使用して Cisco.com からダウンロードしたバイナリ enic_rdma ドライバを使用しようとしても、機能しません。

  • RoCE v2 は、アダプタごとに最大 2 つの RoCE v2 対応インターフェイスをサポートします。

  • NVMeoF ネームスペースからのブートはサポートされていません。

  • レイヤ 3 ルーティングはサポートされていません。

  • RoCE v2 はボンディングをサポートしていません。

  • システム クラッシュ時に crashdump を NVMeoF ネームスペースに保存することはサポートされていません。

  • NVMeoF は、usNIC、VxLAN、VMQ、VMMQ、NVGRE、GENEVE オフロード、および DPDK 機能とともに使用することはできません。

  • Cisco Intersight は、RoCE v2 対応の vNIC に対してファブリック フェールオーバーをサポートしません。

  • Quality of Service(QoS)no drop クラス構成は、Cisco Nexus 9000 シリーズ スイッチなどのアップストリーム スイッチで適切に構成する必要があります。QoS の設定は、異なるアップストリーム スイッチ間で異なります。

  • スパニング ツリー プロトコル (STP) によって、フェールオーバまたはフェールバック イベントが発生したときに、ネットワーク接続が一時的に失われる可能性があります。この問題が発生しないようにするには、アップリンクスイッチで STP を無効にします。

Linux の要件

Linux での RoCE v2 の構成と使用には、次のものが必要です。

  • InfiniBand カーネル API モジュール ib_core

  • NVMeoF 接続をサポートするストレージ アレイ

Cisco Intersight での RoCE v2 for NVMeoF の構成

Cisco Intersight で RoCE v2 インターフェイスを構成するには、次の手順に従います。

RDMA パケット ドロップの可能性を回避するには、ネットワーク全体で同じ非ドロップ COS が構成されていることを確認してください。次の手順に従えば、システム QoS ポリシーで非ドロップ クラスを構成して、RDMA でサポートされているインターフェイス用に使用できます。

手順


ステップ 1

[構成(CONFIGURE)] > [ポリシー(Policies)] に移動します。[ポリシーの作成(Create Policy)] をクリックし、[UCS ドメイン(UCS Domain)] プラットフォーム タイプを選択し、[システム QoS(System QoS)] を検索または選択して、[Start(開始)] をクリックします。

ステップ 2

[全般(General)] ページでポリシー名を入力し、[次へ(Next)] をクリックします。 次に、[ポリシーの詳細(Policy Details)] ページで、次のようにシステム QoS ポリシーのプロパティ設定を構成します。

  • [優先順位(Priority)] で、[プラチナ(Platinum)] を選択します。

  • [パケットドロップを許可(Allow Packet Drops)] チェックボックスをオフにします。

  • [MTU] については、値を 9216 に設定します。

ステップ 3

[作成(Create)] をクリックします。

ステップ 4

システム QoS ポリシーをドメイン プロファイルに関連付けます。

(注)  

 

詳細については、「ドメイン ポリシーの構成」の「システム QoS ポリシーの作成」および「ドメイン プロファイルの構成」を参照してください。


システム QoS ポリシーが正常に作成され、ドメイン プロファイルに展開されます。

次のタスク

LAN 接続ポリシーで RoCE v2 vNIC 設定を使用してサーバ プロファイルを構成します。

LAN 接続ポリシーで RoCE 設定を有効化する

RoCE v2 vNIC を構成するには、次の手順に従います。Cisco Intersight LAN 接続ポリシーでは、次のように Linux 構成向けのイーサネット アダプタ ポリシーの RoCE 設定を有効にできます。

手順


ステップ 1

[構成(CONFIGURE)] > [ポリシー(Policies)] に移動します。[ポリシーの作成(Create Policy)] をクリックし、[UCS サーバ(UCS Server)] プラットフォーム タイプを選択し、[LAN 接続ポリシー(LAN Connectivity policy)] を検索または選択して、[Start(開始)] をクリックします。

ステップ 2

ポリシーの [全般(General)] ページで、ポリシー名を入力し、[ターゲット プラットフォーム(Target Platform)] として [UCS サーバ(スタンドアロン)(UCS Server(Standalone))] または [UCS サーバ(FI アタッチ)(UCS Server(FI-Attached)))] を選択し、[次へ(Next)] をクリックします。

ステップ 3

[ポリシーの詳細(Policy Details)] ページで、[vNIC の追加(Add vNIC)] をクリックして新しい vNIC を作成します。

ステップ 4

[vNIC の追加(Add vNIC)] ページで、構成パラメータに従って RoCE v2 vNIC を有効にします。

  1. [全般(General)] セクションで、仮想イーサネット インターフェイスの名前を入力します。

  2. スタンドアロン サーバの [Consistent Device Naming(CDN)] セクションまたは FI アタッチ サーバの [フェールオーバー(Failover)] セクションで、次の手順を実行します。

    • [イーサネット アダプタ(Ethernet Adapter)] の下で、[ポリシーの選択(Select Policy)] をクリックします。

    • [ポリシーの選択(Select Policy)]ウィンドウで、[新規作成(Create New)] をクリックして、イーサネット アダプタ ポリシーを作成します。

    • [全般(General)] ページで、ポリシーの名前を入力し、[デフォルトの構成を選択(Select Default Configuration)] をクリックします。[デフォルトの構成(Default Configuration)] ウィンドウで [Linux-NVMe-RoCE] を検索して選択し、[次へ(Next)] をクリックします。

    • [ポリシーの詳細(Policy Details)] で、RoCE のデフォルト構成パラメータを確認し、[作成(Create)] をクリックします。

    • [追加 (Add)] をクリックして設定を保存し、新しい vNIC を追加します。

      (注)  

       

      * が付いているすべてのフィールドは必須です。適切なポリシーに従って入力または選択されていることを確認してください。

ステップ 5

[作成(Create)] をクリックし、RoCE v2 設定によって LAN 接続ポリシーを完成させます。

ステップ 6

LAN 接続ポリシーをサーバ プロファイルに関連付けます。

(注)  

 

詳細については、「UCS サーバ ポリシーの構成」の「LAN 接続ポリシーの作成」および「イーサネット アダプタ ポリシーの作成」および「UCS サーバ プロファイルの構成」を参照してください。


イーサネット アダプタ ポリシーの vNIC 設定を含む LAN 接続ポリシーが正常に作成および展開され、RoCE v2 設定が有効になります。

次のタスク

RoCE v2 のポリシー構成が完了したら、続いて、BIOS ポリシーで IOMMU を有効にします。

IOMMU BIOS 設定の有効化

Linux カーネルで IOMMU を有効にする前に、次の手順を実行して、RoCE v2 vNIC を使用するようサーバのサービス プロファイルを構成し、IOMMU BIOS ポリシーを有効にします。

手順


ステップ 1

[構成(CONFIGURE)] > [ポリシー(Policies)] に移動します。[ポリシーの作成(Create Policy)] をクリックし、[UCS サーバ(UCS Server)] プラットフォーム タイプを選択し、[BIOS] を検索または選択して、[Start(開始)] をクリックします。

ステップ 2

[全般(General)] ページで、ポリシーの名前を入力し、[次へ(Next)] をクリックします。

ステップ 3

[ポリシーの詳細(Policy Details)] ページで、次の BIOS を構成します。

  1. [すべてのプラットフォーム(All Platforms)] を選択します。

  2. [メモリ(Memory)] グループを展開します。

  3. [IOMMU] ドロップダウンリストで、IOMMU 構成の設定を有効にする BIOS 値を選択します。

ステップ 4

[作成(Create)] をクリックします。

ステップ 5

BIOS ポリシーをサーバ プロファイルに関連付け、サーバを再起動します。

(注)  

 

詳細については、「サーバ ポリシーの構成」の「BIOS ポリシーの作成」および「サーバ プロファイルの構成」を参照してください。


BIOS ポリシーが正常に作成され、サーバ プロファイルに展開されます。

次のタスク

ホスト システムで RoCE v2 for NVMeoF を構成します。

ホスト システムでの NVMeoF の RoCE v2 の構成

始める前に

IOMMU 対応 BIOS ポリシーを使用して、RoCE v2 vNIC を使用するサーバのサービス プロファイルを設定します。

手順


ステップ 1

編集のために /etc/default/grub ファイルを開きます。

ステップ 2

GRUB_CMDLINE_LINUX の末尾に intel_iommu=onを追加します。

sample /etc/default/grub configuration file after adding intel_iommu=on:
# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap biosdevname=1 rhgb quiet intel_iommu=on
GRUB_DISABLE_RECOVERY="true"

ステップ 3

ファイルを保存した後、新しい grub.cfg ファイルを生成します。

レガシー ブートの場合:

# grub2-mkconfig -o /boot/grub2/grub.cfg

UEFI ブートの場合:

# grub2-mkconfig -o /boot/grub2/efi/EFI/redhat/grub.cfg

ステップ 4

サーバをリブートします。IOMMU を有効にした後で、変更を反映するためにサーバを再起動します。

ステップ 5

サーバが intel_iommu=on オプションを使用して起動されていることを確認します。

cat /proc/cmdline | grep iommu

出力の最後に含まれることに注意してください。


次のタスク

enic および enic_rdma ドライバをダウンロードします。

Cisco enic および enic_rdma ドライバのインストール

enic_rdma ドライバには enic ドライバが必要です。enic および enic_rdma ドライバをインストールする場合は、Cisco.com で一致する enic および enic_rdma ドライバのセットをダウンロードして使用してください。inbox enic ドライバを使用して Cisco.com からダウンロードしたバイナリ enic_rdma ドライバを使用しようとしても、機能しません。

手順


ステップ 1

enic および enic_rdma rpm パッケージをインストールします。

# rpm -ivh kmod-enic-<version>.x86_64.rpm kmod-enic rdma-<version>.x86_64.rpm

(注)  

 

enic_rdma のインストール中に、enic_rdmalibnvdimm モジュールは、RHEL 7.7 へのインストールに失敗することがあります。nvdimm-security.conf dracut モジュールは add_drivers 値にスペースを必要とするためです。回避策については、次のリンクの指示に従ってください。

https://access.redhat.com/solutions/4386041

https://bugzilla.redhat.com/show_bug.cgi?id=1740383

ステップ 2

enic_edma ドライバはインストールされていますが、動作中のカーネルでロードされません。サーバを再起動して、実行中のカーネルに enic_rdma ドライバをロードします。

ステップ 3

enic_rdma ドライバと RoCE v2 インターフェイスのインストールを確認します。

ステップ 4

vme-rdma カーネル モジュールをロードします。

# modprobe nvme-rdma
サーバの再起動後に、nvme-rdma カーネル モジュールがアンロードされます。サーバの再起動ごとに nvme-rdma カーネルモジュールをロードするには、次を使用して nvme_rdma conf ファイルを作成します。
# echo nvme_rdma > /etc/modules-load.d/nvme_rdma.conf

(注)  

 

インストール後の enic_rdma の詳細については、 rpm -q -l kmod-enic_rdma コマンドを使用して README ファイルを抽出します。


次のタスク

ターゲットを検出し、NVMe ネームスペースに接続します。システムでストレージへのマルチパス アクセスが必要な場合は、デバイス マッパー マルチパスの設定 についてのセクションを参照してください。

NVMe ターゲットの検出

NVMe のターゲットを検出し、NVMe ネームスペースを接続するには、次の手順を使用します。

始める前に

まだインストールされていない場合は、 nvme cli バージョン 1.6 以降をインストールします。


(注)  


nvme-cli バージョン 1.7 以降がインストールされている場合は、下のステップ 2 はスキップします。


RoCEv2 インターフェイスで IP アドレスを設定し、インターフェイスがターゲット IP に対して ping を実行できることを確認します。

手順


ステップ 1

/etc で nvme フォルダを作成し、ホスト nqn を手動で生成します。

# mkdir /etc/nvme
# nvme gen-hostnqn > /etc/nvme/hostnqn

ステップ 2

settos.sh ファイルを作成し、IB フレームでプライオリティ フロー制御 (PFC) を設定するスクリプトを実行します。

(注)  

 

NVMeoF トラフィックの送信に失敗しないようにするには、サーバを再起動するごとににこのスクリプトを作成して実行する必要があります

# cat settos.sh
#!/bin/bash
for f in `ls /sys/class/infiniband`;
do
        echo "setting TOS for IB interface:" $f
        mkdir -p /sys/kernel/config/rdma_cm/$f/ports/1
        echo 186 > /sys/kernel/config/rdma_cm/$f/ports/1/default_roce_tos
done

ステップ 3

次のコマンドを入力して、NVMe ターゲットを検出します。

nvme discover --transport=rdma --traddr=<IP address of transport target port>
例えば、50.2.85.200 でターゲットを検出するには、次のようにします。
# nvme discover --transport=rdma --traddr=50.2.85.200

Discovery Log Number of Records 1, Generation counter 2
=====Discovery Log Entry 0======
trtype:  rdma
adrfam:  ipv4
subtype: nvme subsystem
treq:    not required
portid:  3
trsvcid: 4420
subnqn:  nqn.2010-06.com.purestorage:flasharray.9a703295ee2954e
traddr:  50.2.85.200
rdma_prtype: roce-v2
rdma_qptype: connected
rdma_cms:    rdma-cm
rdma_pkey: 0x0000

(注)  

 

IPv6 を使用して NVMe ターゲットを検出するには、 traddr オプションの次に IPv6 ターゲット アドレスを指定します。

ステップ 4

次のコマンドを入力して、検出された NVMe ターゲットに接続します 。

nvme connect --transport=rdma --traddr=<IP address of transport target port>> -n <subnqn value from nvme discover>
例えば、50.2.85.200 のターゲットと上記の subnqn 値を検出するには、次の手順を実行します。
# nvme connect --transport=rdma --traddr=50.2.85.200 -n nqn.2010-06.com.purestorage:flasharray.9a703295ee2954e

(注)  

 

IPv6 を使用して検出した NVMe ターゲットに接続するには、 traddr オプションの次に IPv6 ターゲット アドレスを指定します。

ステップ 5

nvme list コマンドを使用して、マッピングされたネームスペースを確認します。

# nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     09A703295EE2954E     Pure Storage FlashArray                  72656       4.29  GB /   4.29  GB    512   B +  0 B   99.9.9
/dev/nvme0n2     09A703295EE2954E     Pure Storage FlashArray                  72657       5.37  GB /   5.37  GB    512   B +  0 B   99.9.9

デバイス マッパー マルチパスの設定

システムがデバイス マッパー マルチパス (DM マルチパス) を使用して構成されている場合は、次の手順に従ってデバイス マッパー マルチパスをセットアップします。

手順


ステップ 1

まだインストールされていない場合は、device-mapper-multipath パッケージをインストールします。

ステップ 2

Multipathd を有効にして開始します。

# mpathconf --enable --with_multipathd y

ステップ 3

etc/multipath.conf ファイルを編集して、次の値を使用します。

ステップ 4

更新されたマルチパス デバイス マップを使用してフラッシュします。

# multipath -F

ステップ 5

マルチパス サービスを再起動します。

# systemctl restart multipathd.service

ステップ 6

マルチパス デバイスを再スキャンします。

# multipath -v2

ステップ 7

マルチパス ステータスを確認します。

# multipath -ll

Cisco Intersight を使用した RoCE v2 インターフェイスの削除

RoCE v2 インターフェイスを削除するには、次の手順を実行します。

手順


ステップ 1

[構成(CONFIGURE)] > [ポリシー(Policies)] に移動します。[フィルタの追加(Add Filter)] フィールドで、[タイプ:LAN 接続(Type: LAN Connectivity)] を選択します。

ステップ 2

RoCE V2 構成用に作成された適切な LAN 接続ポリシーを選択し、ポリシー リストの上部または下部にある削除アイコンを使用します。

ステップ 3

ポリシーを削除するには、[削除(Delete)] をクリックします。

ステップ 4

RoCE v2 構成を削除したら、サーバ プロファイルを再展開し、サーバを再起動します。