この記事は、Huawei Cloud Community 「帯域幅 X2 を達成するための 2 つの RoCE ネットワーク カードの結合集約」(著者: tsjsdbd) から共有されたものです。
オペレーティング システムでは、プライマリおよびバックアップ/帯域幅の増加などの目的を達成するために、2 つの実際の物理ネットワーク カードを組み合わせて「論理ネットワーク カード」を形成できることがわかっています。しかし、RoCE ネットワーク カードは通常のネットワーク カードと同様に Bond 機能もサポートしますか? 答えは「はい」です。RoCE もボンドを形成できますが、通常のネットワーク カードよりも多くの制約があります。
今日はこのプロセスを実践し、何に注意を払う必要があるかを理解します。一緒に交流したり学んだりするのも大歓迎です。
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 つの値があります。
ここでは、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 に対応して、より大きく設定して効果を試すことができます。
結果の例は次のとおりです。
7. サーバー側の統計
キュー 4 内のパケット数をクエリします。
watch -n 2「ethtool -S ens3f0np0 |」grep prio4”
このパケット数は減らないのでクリアするのが不便で、サーバーを再起動しても0にはならないようです。
IB モジュールを (必要に応じて) アンインストールして統計をクリアするという目的のみが見つかりました。
rmmod mlx5_ib rmmod mlx5_core modprob mlx5_core
ネットワーク カードの温度をクエリします。
mget_temp -d mlx5_bond_0
温度がわかりますが、通常は約 62/63 度です。
8. まとめ
この記事はあくまで相互コミュニケーションのための操作記録であり、必ずしもベストプラクティスであるとは限りませんので、ご自由にお読みください。
なぜなら、公式Webサイト https://mellanox.my.site.com/mellanoxcommunity/s/article/How-to-Configure-RoCE-over-LAG-ConnectX-4-ConnectX-5-ConnectX-6
次のように書かれています。
クリックしてフォローし、できるだけ早く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 の発売を計画