我安装了 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。我认为您应该分配不同的子网地址来解决这个问题。