6個常見的IB網路不通問題

2023-06-26 15:00:19
摘要:如果遇到IB網路不通,可以試著從高層往底層逐步分析看看。

本文分享自華為雲社群《常見IB網路不通問題記錄》,作者: tsjsdbd 。

如果遇到IB網路不通,可以試著從高層往底層逐步分析看看。僅記錄下,供難友參考:

一、NCCL不通

報錯:

machine-19: [0] transport/net_ib.cc:839 NCCL WARN NET/IB : Got completion with error 12, opcode 0, len 0, vendor err 129

原因:錯誤12,說明RDMA網路不通。

需要分析底層網路為什麼不通。

比如:

  • 是否單純網路不通
  • pfc流控不對導致丟包。

如果是(2)這種偶現不通的話,可以參考pfc設定規則:《為什麼華為雲上AI訓練必須設定NCCL_IB_TC=128

二、ib_write_bw不通

報錯1:

root@tsjsdbd:~# ib_write_bw
----------------------------------------------------------
 RDMA_Write BW Test
 Dual-port      : OFFDevice         : mlx4_0
 Number of qps : 1Transport type : IB
 Connection type : RCUsing SRQ      : OFF
 CQ Moderation  : 100
 Mtu : 2048[B]
 Link type : IB
 Max inline data : 0[B]
 rdma_cm QPs : OFF
 Data ex. method : Ethernet
--------------------------------------------------------
 local address: LID 0x81 QPN 0x160b3 PSN 0xa072 RKey 0x68010802 VAddr 0x007f184171a000
 remote address: LID 0x35 QPN 0xc5a0b PSN 0xaa465a RKey 0x20010802 VAddr 0x007f3ca2b9c000
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
ethernet_read_keys: Couldn't read remote address
 Unable to read to socket/rdam_cm
 Failed to exchange data between server and clients

報錯2:

root@tsjsdbd:~# ib_write_bw -F 29.26.130.185 -d mlx5_5
----------------------------------------------------------
 RDMA_Write BW Test
 Dual-port         : OFF                 Device         : mlx5_5
 Number of qps : 1                   Transport type : IB
 Connection type : RC                 Using SRQ      : OFF
 PCIe relax order: ON
 ibv_wr* API     : ON
 TX depth         : 128
 CQ Moderation  : 1
 Mtu : 2048[B]
 Link type : Ethernet
 GID index        : 3
 Max inline data : 0[B]
 rdma_cm QPs      : OFF
 Data ex. method : Ethernet
--------------------------------------------------------
 local address: LID 0x81 QPN 0x160b3 PSN 0xa072 RKey 0x68010802 VAddr 0x007f184171a000
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:29:26:130:235
 remote address: LID 0x35 QPN 0xc5a0b PSN 0xaa465a RKey 0x20010802 VAddr 0x007f3ca2b9c000
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:29:26:130:185
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
 Completion with error at client
 Failed status 12: wr_id 0 Syndrom 0x81
scnt=128, ccnt=0
 Failed to complete run_iter_bw function successfully

說明網路不通,需要繼續分析RDMA鏈路。

三、ibv_rc_pingpong不通

報錯:

ibv_rc_pingpong -d mlx5_bond_0 -g 3 29.28.195.228
 local address:  LID 0x0000, QPN 0x01417f, PSN 0x63d7fa, GID ::ffff:29.28.201.21
  remote address: LID 0x0000, QPN 0x00132d, PSN 0x8c0a5b, GID ::ffff:29.28.195.228
Failed status transport retry counter exceeded (12) for wr_id 2
parse WC failed 1

說明網路不通,需要分析IP網路為什麼不通。

四、rping不通

報錯1:

rping -c -a 29.28.195.228 -v -C 10
cma event RDMA_CM_EVENT_ADDR_ERROR, error -110
waiting for addr/route resolution state 1

說明地址連不上,需要繼續判斷IP鏈路是否通。

報錯2:

rping -c -a 29.28.197.165 -C 10 -v
cma event RDMA_CM_EVENT_REJECTED, error 8
wait for CONNECTED state 4
connect error -1

這個Reject表示連線被拒絕了。只是單純的因為 rping 工作時需首先啟動一個 server side 程序,然後從 client side 試圖向 server side 發起連線。

所以要先啟動Server端。

rping -s 29.28.201.211 -v

五、ping不通

報錯:

ping 29.28.195.228
PING 29.28.195.228 (29.28.195.228) 56(84) bytes of data.
From 29.28.204.80 icmp_seq=1 Destination Host Unreachable
From 29.28.204.80 icmp_seq=2 Destination Host Unreachable
From 29.28.204.80 icmp_seq=3 Destination Host Unreachable
From 29.28.204.80 icmp_seq=4 Destination Host Unreachable
^C
--- 29.28.195.228 ping statistics ---
5 packets transmitted, 0 received, +4 errors, 100% packet loss, time 4045ms

這個估計就快到根錯誤了,假設交換機連線都是OK的。那基本就是路由設定問題:

可以用

# ip route get 29.28.204.80 from 29.28.201.211
29.28.204.80 from 29.28.201.211 dev enp137s0f0 uid 0

來確認傳送報文的網路卡是否選擇正確。

如果是「同網段多IB網路卡」的情況,如A100 或者 A800服務,帶8個IB網路卡,並都在同一個網段。則需要通過策略路由設定「源地址路由」規則來解決各個IP互通的問題。見:《RoCE多網路卡時,報文可以過去,但是回不來

六、ARP表不對

如果ping是通的,但是rping又不通。 那就還要再底層看一看了(你也算天選之子了,跑這麼底層定位錯誤)。

正常情況,學習到的arp表,一個IP地址對應一個網路卡的MAC地址。

如下:

/home/tsj # arp -n | grep 29.28.201.211
29.28.201.211            ether  08:c0:eb:8c:10:6d   C                     enp137s0f1

兩端同時檢視,如果發現一個IP地址,學習到的arp記錄有多條不一樣的,說明arp設定不對。

需要

  • 先清空arp表
  • 設定arp應答規則

其中,

(1)清空arp表有2種方式:

  • 指定某個IP清空:
arp -d 192.168.1.1
  • 清空所有arp:(咱們直接執行這個就行)
ip -s -s neigh flush all

(2)設定arp應答規則:

sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2

意思是隻答覆對應網路卡的arp響應。

設定完後,再ping一次後,確認兩邊學習到的arp表是正確的。

 

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