帯域幅最適化のための新しいアイデア: RoCE ネットワーク カード アグリゲーションにより X2 の成長を達成

この記事は、Huawei Cloud Community 「帯域幅 X2 を達成するための 2 つの RoCE ネットワーク カードの結合集約」(著者: tsjsdbd) から共有されたものです。

オペレーティング システムでは、プライマリおよびバックアップ/帯域幅の増加などの目的を達成するために、2 つの実際の物理ネットワーク カードを組み合わせて「論理ネットワーク カード」を形成できることがわかっています。しかし、RoCE ネットワーク カードは通常のネットワーク カードと同様に Bond 機能もサポートしますか? 答えは「はい」です。RoCE もボンドを形成できますが、通常のネットワーク カードよりも多くの制約があります。

10001.png

今日はこのプロセスを実践し、何に注意を払う必要があるかを理解します。一緒に交流したり学んだりするのも大歓迎です。

1. RoCEネットワークカードリンクアグリゲーション(LAG)

見つかった情報によると: https://mellanox.my.site.com/mellanoxcommunity/s/article/How-to-Configure-RoCE-over-LAG-ConnectX-4-ConnectX-5-ConnectX-6、The Bond RoCE ネットワーク カードは 3 つのモードのみをサポートします。

  • モード 1 (アクティブおよびバックアップ)
  • モード 2 (ロード バランシング)
  • モード 4 (リンクアグリゲーション)

通常のネットワークカードの0から6までの合計7つのモードと比較すると、大幅な割引になります。幸いなことに、私たちが望む「帯域幅の増加」モデルはまだ存在します。

2. サーバーはデュアル ネットワーク カード アグリゲーション (ボンド) 操作を実行します。

オペレーティング システムが異なれば、Bond を実行するためのコマンドも異なります。ここで実際に動作させているのはUbuntu22.04で、組み込みのnetplanツールを使用したボンド実行プロセスは以下の通りです。

改訂:

vi /etc/netplan/00-installer-config.yaml
ネットワーク:
  イーサネット: 
    ens3f0np0 
      dhcp4: いいえ
    ens3f1np1 
      dhcp4: いいえ
  バージョン: 2
  レンダラ: networkd
  ボンド: 
    Bond0:
      インターフェイス: [ens3f0np0, ens3f1np1]
      パラメーター:
        モード: 802.3ad 
        mii-監視間隔: 1 
        lacp レート: faset
        送信ハッシュ ポリシー: レイヤー 3+4
      アドレス: [10.10.2.20/24]

埋め込む:

ネットプラン適用

その後、「bond0」というネットワーク カードが表示されます。

ここで、設定したボンドには 2 つの重要なパラメータがあります。

(1) ボンド モード 4、つまり 802.3ad (リンク アグリゲーション) を選択します。

(2) transfer-hash-policy、負荷分散ポリシーには、次の 3 つの値があります。

10002.png

ここでは、RDMA ポイントツーポイント通信のため、IP+MAC アドレスは変わりません。したがって、レイヤー 3+4 を選択しますが、結局のところ、メッセージを送信するときの送信元ポートはランダムのままです。

参考までに CentOS の操作を添付します。

新しいボンドポートを作成する

nmcli con add type Bond ifname tsjbond0 Bond.options "mode=2,miimon=100,uplay=100,downlay=100"

サブネットカードを追加する

nmcli con add type ethernet ifname enp80s0f0 master tsjbond0 
nmcli con add type ethernet ifname enp80s0f1 master tsjbond0

サブネットカードをアクティブ化する

nmcli con up Bond-slave-enp80s0f0 
nmcli con up Bond-slave-enp80s0f1

ボンドカードの構成を変更しました

vi /etc/sysconfig/network-scripts/ifcfg-bond-tsjbond0 
IPADDR=29.28.195.228 
NETMASK=255.255.240.0

2 つのサブネット カード構成を変更する

vi /etc/sysconfig/network-scripts/ifcfg-enp80s0f0 
DEVICE=enp80s0f0 
TYPE=Ethernet 
ONBOOT=yes 
MASTER= tsjbond0 
SLAVE=yes 
BOOTPROTO=none

ボンドカードを有効化する

ifup ボンド-スレーブ-enp80s0f0 
ifup ボンド-スレーブ-enp80s0f1 
ifdown ボンド-tsjbond0 
ifup ボンド-tsjbond0

3. サーバーは、新しいネットワーク カードの PFC フロー制御を有効にします。

次のコマンドを実行して、最初に MTU を設定します。

ifconfig Bond0 男性 4200

次に、キュー 4 の PFC フロー制御ポリシーを有効にします。

mlnx_qos -i ens3f0np0 --pfc=0,0,0,0,1,0,0,0 --turst=dscp 
mlnx_qos -i ens3f1np1 --pfc=0,0,0,0,1,0,0, 0 --turst=dscp 
cma_roce_mode -d mlx5_bond_0 -p 1 -m 2 
echo 128 > /sys/class/infiniband/mlx5_bond_0/tc/1/traffic_class

このうち、最初の 2 つのコマンドは、ボンド下の各サブネットワーク カードに対して pfc を有効にする必要があります。

その後、ibdev2netdev コマンドを使用して mlx5_bond_0 を照会できます。

最後の echo 128 コマンドは、ネットワーク カードによって送信されるパケットのトラフィック クラスを強制的に 128、つまりネットワーク カード送信キュー 4 と一致させることです。設定しなくても大丈夫ですが、NCCL_IB_TC=128 とすれば同様の目的が得られます。詳細については、「Huawei Cloud での AI トレーニングに NCCL_IB_TC=128 を設定する必要がある理由」の記事を参照してください。

4. スイッチはデュアル ネットワーク ポート アグリゲーション (LACP) を実行します。

LACP モードを有効にするためのコマンドはスイッチごとに異なります。ここでのモデルは CE9860 です。次のように実行します。

eth-trunkポートを開きます。

インターフェイス Eth-Trunk1
ポート リンクタイプ トランク
モード lacp-static

次に、対応するネットワーク ポートに切り替えて、このトランク ポートに追加します。

インターフェイス GigabitEthernet0/0/1 
eth-trunk 1
 
インターフェイス GigabitEthernet0/0/2 
eth-trunk 1

コマンド操作はこの考え方に基づいており、さらに、負荷分散プロファイルのデフォルト設定を変更することで LACP LB ポリシーが完成します。

eth-trunk hash-mode ? 
  INTEGER<1-9> 異なるハッシュ モードは、トランクからの出力トラフィック フローの異なる負荷分散結果を提供します。デフォルトは 1 です。
  Eth-Trunk の場合、モード 1 が推奨されます
  。 SMAC の変更の場合、モード 1/2 /6/7 が推奨されます
  SIP 変更の場合、モード 1/5/7/9 が推奨されます
  DIP 変更の場合、モード 5/6 が推奨されます
  DMAC&SMAC 変更の場合、モード 9 が推奨されます
  SMAC+SIP 変更の場合、モード 5/6 が推奨されます

デフォルト値は 1 です。

5. スイッチは、対応するポートの PFC フロー制御を有効にします。

スイッチ上で実行します。

qos バッファ ヘッドルーム プール サイズ 20164 セル スロット 1
インターフェイス 400 x/x/x 
trust dscp 
dcb pfc イネーブル モード 手動
dcb pfc バッファ 4 xoff ダイナミック 4 hdrm 3000 セル
コミット

上記のコマンドは実際には pfc をオンにするだけでなく、ネットワーク ポートに対応するバッファ サイズも設定します。特定のパラメータ値はあなた次第です。

6. RDMAトラフィック帯域幅テスト

これは私たちがよく使用する帯域幅テスト コマンドです。

まず、サーバー側でサーバーを起動します。

ib_write_bw -s 8388608 -F --run_infinitely -x 3 -q 8 --report_gbits

次に、クライアントはサーバーへのストリーミングを開始します。

ib_write_bw -s 8388608 -F --run_infinitely -x 3 10.10.2.20 -q 8 --report_gbits

-x パラメーターは 3 に設定されます。これは、RoCE V2 プロトコルが使用されることを意味します。

パラメーター --run_infinitely を使用すると、テストを停止せずに続行できます。

-q は、複数の QPS (キュー ペア) ストリームを使用することを示します。NCCL_IB_QPS_PER_CONNECTION に対応して、より大きく設定して効果を試すことができます。

結果の例は次のとおりです。

10003.png

7. サーバー側の統計

キュー 4 内のパケット数をクエリします。

watch -n 2「ethtool -S ens3f0np0 |」grep prio4”

1695889454470488453.png

このパケット数は減らないのでクリアするのが不便で、サーバーを再起動しても0にはならないようです。

IB モジュールを (必要に応じて) アンインストールして統計をクリアするという目的のみが見つかりました。

rmmod mlx5_ib 
rmmod mlx5_core 
modprob mlx5_core

ネットワーク カードの温度をクエリします。

mget_temp -d mlx5_bond_0

温度がわかりますが、通常は約 62/63 度です。

1695889477679879869.png

8. まとめ

この記事はあくまで相互コミュニケーションのための操作記録であり、必ずしもベストプラクティスであるとは限りませんので、ご自由にお読みください。

なぜなら、公式Webサイト https://mellanox.my.site.com/mellanoxcommunity/s/article/How-to-Configure-RoCE-over-LAG-ConnectX-4-ConnectX-5-ConnectX-6

次のように書かれています。

10005.png

クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~

オープンソース フレームワーク NanUI の作者がスチールの販売に切り替えたため、プロジェクトは中断されました。Apple App Store の無料リストのナンバー 1 はポルノ ソフトウェア TypeScript です。人気が出てきたばかりなのに、なぜ大手はそれを放棄し始めるのでしょうか。 ? TIOBE 10月リスト:Javaが最大の下落、C#はJavaに迫る Rust 1.73.0リリース AIガールフレンドにイギリス女王暗殺を勧められた男性に懲役9年の実刑判決 Qt 6.6正式リリース ロイター:RISC-Vテクノロジーが中米テクノロジー戦争の鍵となる 新たな戦場 RISC-V: 単一の企業や国に支配されない レノボ、Android PC の発売を計画
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4526289/blog/10115827