頻寬最佳化新思路:RoCE網路卡聚合實現X2增長

華為雲開發者聯盟發表於2023-10-07

本文分享自華為雲社群《2個RoCE網路卡Bond聚合,實現頻寬X2》,作者: tsjsdbd 。

我們知道作業系統裡面,可以將2個實際的物理網路卡,合體形成一個“邏輯網路卡”,從而達到如主備/提升頻寬等目的。但是RoCE網路卡,是否也跟普通網路卡一樣,支援Bond能力呢?答案是的,RoCE也可以組Bond,只是比普通網路卡多了一些約束。

10001.png

今天我們就來實際操作一下這個過程,並瞭解其中需要注意的地方。也歡迎一起交流學習。

一、RoCE網路卡鏈路聚合(LAG)

根據找到的資料:https://mellanox.my.site.com/mellanoxcommunity/s/article/How-to-Configure-RoCE-over-LAG-ConnectX-4-ConnectX-5-ConnectX-6 裡面說的,RoCE網路卡的Bond,只支援3種模式:

  • 模式1(主備)
  • 模式2(負載均衡)
  • 模式4(鏈路聚合)

相比普通網路卡總共0-6共七種模式而言,算是打了大折。好在我們想要的“提升頻寬”的模式還是有的。

二、伺服器執行雙網路卡聚合(Bond)操作

不同的作業系統,執行Bond的命令不一樣。這裡我實際操作的是Ubuntu22.04,使用自帶的 netplan工具,執行bond過程如下:

修改:

vi /etc/netplan/00-installer-config.yaml
network:
  ethernets:
    ens3f0np0
      dhcp4: no
    ens3f1np1
      dhcp4: no
  version: 2
  renderer: networkd
  bonds:
    bond0:
      interfaces: [ens3f0np0, ens3f1np1]
      parameters:
        mode: 802.3ad
        mii-monitor-interval: 1
        lacp-rate: faset
        transmit-hash-policy: layer3+4
      addresses: [10.10.2.20/24]

執行:

netplan apply

後,就可以看到一個叫“bond0”的網路卡了。

這裡,我們們配置的bond裡面有2個重要的引數:

(1)選擇bond模式4,即802.3ad(鏈路聚合)

(2)transmit-hash-policy,負載均衡策略,有以下3種值:

10002.png

這裡由於RDMA點對點通訊的時候,IP+MAC地址都不會變。所以我們選 layer3+4,畢竟傳送報文的時候,源埠還是隨機的。

附CentOS的操作供參考:

新建bond口

nmcli con add type bond ifname tsjbond0 bond.options "mode=2,miimon=100,updelay=100,downdelay=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

修改了bond卡的配置

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

啟用bond卡

ifup bond-slave-enp80s0f0
ifup bond-slave-enp80s0f1
ifdown bond-tsjbond0
ifup bond-tsjbond0

三、伺服器為新網路卡開啟PFC流控

執行如下命令,首先設定MTU:

ifconfig bond0 mtu 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條命令需要分別為bond下的各個子網路卡開啟pfc。

然後,mlx5_bond_0 可以透過 ibdev2netdev 命令查詢得到。

最後一條echo 128命令,是指強制網路卡傳送的報文的Traffic Class為128,即匹配網路卡傳送佇列4。不設定的話也行,可以透過 NCCL_IB_TC=128 達成相同的目的。詳細可以參考《為什麼華為雲上AI訓練必須設定NCCL_IB_TC=128》一文。

四、交換機執行雙網口聚合(LACP)

不同的交換機開啟LACP模式的命令不一樣,這裡型號是 CE9860。執行如下:

開啟eth-trunk口。

interface Eth-Trunk1
port link-type trunk
mode lacp-static

然後切換到對應的網口,使其加入到這個trunk口。

interface GigabitEthernet0/0/1
eth-trunk 1
 
interface GigabitEthernet0/0/2
eth-trunk 1

命令操作基本這個思路,另外,LACP的LB策略,是透過修改 load-balance profile default配置完成的:

eth-trunk hash-mode ?
  INTEGER<1-9> Different hash mode provide different load distribution result for egress traffic flows from a trunk, the default is 1
  For Eth-Trunk, mode 1 is suggested
  For SMAC change, mode 1/2/6/7 is suggested
  For SIP change, mode 1/5/7/9 is suggested
  For DIP change, mode 5/6 is suggested
  For DMAC&SMAC change, mode 9 is suggested
  For SMAC+SIP change, mode 5/6 is suggested

預設值是1。

五、交換機為對應埠開啟PFC流控

交換機上執行:

qos buffer headroom-pool size 20164 cells slot 1
interface 400 x/x/x
trust dscp
dcb pfc enable mode manual
dcb pfc buffer 4 xoff dynamic 4 hdrm 3000 cells
commit

上面的命令,其實除了開啟pfc之外,還設定了網口對應的buffer大小。具體引數值大小自己看著辦。

六、RDMA流量頻寬測試

這個就是我們們平時經常用的頻寬測試命令了:

首先伺服器端,啟動Server,

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

然後Client開始給服務端打流:

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(Queue-Pairs)流。對應 NCCL_IB_QPS_PER_CONNECTION,可以嘗試設大一點試試效果。

示意的一個結果如下:

10003.png

七、伺服器端統計資訊

查詢佇列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

八、小結

本文只是操作記錄,用於互相交流,不一定是最佳實踐,自己有選擇的看。

因為官網https://mellanox.my.site.com/mellanoxcommunity/s/article/How-to-Configure-RoCE-over-LAG-ConnectX-4-ConnectX-5-ConnectX-6

這麼寫的:

10005.png

點選關注,第一時間瞭解華為雲新鮮技術~

 

相關文章