写点什么

6 个常见的 IB 网络不通问题

  • 2023-06-26
    广东
  • 本文字数:2482 字

    阅读完需:约 8 分钟

6个常见的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 : OFF Device : mlx4_0
Number of qps : 1 Transport type : IB
Connection type : RC Using 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 表是正确的。


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
6个常见的IB网络不通问题_后端_华为云开发者联盟_InfoQ写作社区