Mellanox 双端口 HCA,如果 ib0 对已连接,则可以 ping 通,但如果仅 ib1 对已连接,则无法 ping 通

Mellanox 双端口 HCA,如果 ib0 对已连接,则可以 ping 通,但如果仅 ib1 对已连接,则无法 ping 通

我安装了 2 个 mellanox FDR 双端口 ConnectX-3 HCA 卡 (CX354A),每个卡都安装在单独的机器上。机器直接相互连接(无交换机配置)。卡上的两个端口都连接在一起,端口 1 连接到端口 1,端口 2 连接到端口 2。每个端口的配置如下:

HCA1 port1:  ib0    inet addr:192.168.10.13  Bcast:192.168.10.255  Mask:255.255.255.0
          port2: ib1     inet addr:192.168.10.15  Bcast:192.168.10.255  Mask:255.255.255.0

HCA2 port1: ib0     inet addr:192.168.10.24  Bcast:192.168.10.255  Mask:255.255.255.0
         port2: ib1     inet addr:192.168.10.26  Bcast:192.168.10.255  Mask:255.255.255.0

如下所示在 HCA1 上运行 2 个 opensm 命令,ibstat 显示所有 4 个端口均已启动并处于活动状态。

root@HCA1# opensm -g <ib0 GUID> --daemon
root@HCA1# opensm -g <ib1 GUID> --daemon

通过上述配置,我可以从任何 IP ping 到上面的任何其他 IP。

但是,当我断开端口 1 的电缆时,连接的端口 2 对之间无法 ping 通。断开端口 2 对并仅连接端口 1 对,即使断开端口 2 IP,ping 也能正常工作 (?) 这可能是什么原因造成的,我该如何修复此问题。请说明我应该发布哪些额外信息。

我想要实现的目标是为每个端口对建立完全隔离的链接,并运行单独的 openMPI 进程来同时测试和比较两条无限带宽电缆的带宽。有人能建议如何做到这一点吗?

就我所学,我认为我需要为每个端口对创建不同的分区密钥。(目前他们使用默认密钥 0xffff )但是,一旦在启动过程中配置了 infiniband,就无法更改此默认密钥。有什么建议或意见吗?

两台机器都运行 CentOS 6.4,并且我已经安装了 Mellanox OFED 1.5.3。

这些是两台机器上 ibstat 的输出:

[root@HCA1 Desktop]# ifconfig ib0  
ib0       Link encap:InfiniBand  HWaddr   80:00:00:48:FE:81:00:00:00:00:00:00:00:00:00:00:00:00:00:00  
          inet addr:192.168.10.13  Bcast:192.168.10.255  Mask:255.255.255.0  
          inet6 addr: fe80::202:c903:21:8f11/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:65520  Metric:1  
          RX packets:4144160 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:4141376 errors:0 dropped:2 overruns:0 carrier:0  
          collisions:0 txqueuelen:1024  
          RX bytes:702746349 (670.1 MiB)  TX bytes:719570861 (686.2 MiB)  


[root@HCA1 Desktop]# ifconfig ib1  
ib1       Link encap:InfiniBand  HWaddr   80:00:00:49:FE:82:00:00:00:00:00:00:00:00:00:00:00:00:00:00  
          inet addr:192.168.10.15  Bcast:192.168.10.255  Mask:255.255.255.0  
          inet6 addr: fe80::202:c903:21:8f12/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:65520  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1024  
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)  


[root@HCA2 Desktop]# ifconfig ib0  
ib0       Link encap:InfiniBand  HWaddr   80:00:00:48:FE:81:00:00:00:00:00:00:00:00:00:00:00:00:00:00  
          inet addr:192.168.10.24  Bcast:192.168.10.255  Mask:255.255.255.0  
          inet6 addr: fe80::202:c903:21:8f51/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:65520  Metric:1  
          RX packets:4141382 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:4144161 errors:0 dropped:2 overruns:0 carrier:0  
          collisions:0 txqueuelen:1024  
          RX bytes:703005597 (670.4 MiB)  TX bytes:719323129 (685.9 MiB)  


[root@HCA2 Desktop]# ifconfig ib1  
ib1       Link encap:InfiniBand  HWaddr   80:00:00:49:FE:82:00:00:00:00:00:00:00:00:00:00:00:00:00:00  
          inet addr:192.168.10.26  Bcast:192.168.10.255  Mask:255.255.255.0  
          inet6 addr: fe80::202:c903:21:8f52/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:65520  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1024  
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)  

加载的模块如下:

[root@HCA1 Desktop]# /etc/init.d/openibd status

  HCA driver loaded

Configured IPoIB devices:
ib0 ib1

Currently active IPoIB devices:
ib0
ib1

The following OFED modules are loaded:

  rdma_ucm  
  rdma_cm  
  ib_addr  
  ib_ipoib  
  mlx4_core  
  mlx4_ib  
  mlx4_en  
  ib_mthca  
  ib_uverbs  
  ib_umad  
  ib_ucm  
  ib_sa  
  ib_cm  
  ib_mad  
  ib_core  
  iw_cxgb3  
  iw_nes  

答案1

好吧,我不太熟悉 CentOS 上的设置,但我认为正在发生的情况是这样的。opensm 的一个或两个副本在 ib0 链接上运行,但其他的不行。ib0 是 OpenSM 的默认设置。

据我了解,您需要在此特定设置上运行两份 opensm,因为如果没有交换机将所有 HCA 绑定在一起,那么它本质上就是两个结构,您需要在两个结构上运行子网管理器。您正确地选择了这一点,但实际上并没有正确运行它们(特别是第二个实例)。

当两个都连接时,Ping 似乎可以工作,因为 Linux 将 ping 传递到第二个接口并对两个 IP 做出响应。所有这些都通过 ib0(Pair1)进行。

在我熟悉的 ubuntu 下有一个配置文件 /etc/default/opensm。

在 CentOS 上听起来好像有所不同。Ubuntu 上该文件的格式用于使用正确的端口运行 opensm,因为每个端口上都需要一个 opensm 子网管理器。

基本上你想要做的不是运行

opensm-g--守护进程

两次,但相反

/usr/sbin/ibstat -p

这将给出如下输出:

0x001a4bffff0c34e5
0x001a4bffff0c34e6

然后运行

opensm -g 0x001a4bffff0c34e5 --daemon 
opensm -g 0x001a4bffff0c34e6 --daemon 

在 Ubuntu 下,init 脚本实际上会自动执行 ports=ALL(从 /etc/default/opensm 读取)的过程,其中 ALL 是 init 脚本选取的关键字。

CentOS 下可能有一个 opensm 的初始化脚本。同时可以使用上述命令,或者您可以编写自己的启动脚本。


更新:我不确定这是否会有所不同,但我还加载了以下两个内核模块,而您没有。

ib_ipath
ib_qib

您是否也为 HCA 刷入了最新固件?这实际上非常重要。不要以为它们出厂时就是最新固件。

答案2

我可以看到两个不同的物理子网配置了相同的子网地址 192.168.10.0。我认为您应该分配不同的子网地址来解决这个问题。

相关内容