http://www.ibm.com/developerworks/cn/linux/l-cn-infiniband/
随着服务器处理速度的不断加快,用户对提升网络传输速度的需求也越来越紧迫,传统意义上的输入 / 输出技术, 如 PCI、以太等,已经无法满足这种需求。如何更为有效的提高数据传输速度,增加有效带宽成为摆在人们面前必须解决的一个重大问题。 InfiniBand 标准就是在这种情况下应运而生的,它在很大程度上解决了传统输入 / 输出架构的传输瓶颈问题 , 运行速度可达到每端口 2.5Gb/s 或 10Gb/s 。
目前,这项技术已经广泛应用到高性能计算等领域,Linux 操作系统内核也对其提供了全面的支持,本文将逐一介绍 InfiniBand 技术架构,以及如何在 Red Hat Enterprise Linux 5.3 和 SLES11 系统中配置 InfiniBand 网络设备,包括网卡驱动的安装以及 IPoIB(IP over InfiniBand)接口配置。
InfiniBand 是一种基于交换的串行 I/O 互连体系结构,运行速度为每方向 2.5Gb/s 或 10Gb/s(每端口)。和共享总线结构不同,InfiniBand 是一个针数很少的串行结构,可连接印刷电路板(PCB – Printed circuit board)上的设备,并支持箱外带宽(Bandwidth Out of the Box)。使用普通的双绞铜线,InfiniBand 支持的连接距离为 17m ;而如果使用光缆,其支持的距离则可达数公里甚至更远。此外,InfiniBand 还支持 QoS 和 RAS 。 RAS 特性在设计之初就被融入了 InfiniBand 的体系结构,这些特性对于 InfiniBand 有能力成为位于 Internet 核心的下一代服务器和存储系统的通用 I/O 基础架构具有非常重要的意义。 InfiniBand 终将从根本上改变系统和 Internet 互连体系,并促成一场伟大的技术变革。
也正因如此,InfiniBand 系统网络(如图一所示)受到各大工业公司的支持,其中包括了所有主要服务器厂商(如:戴尔,惠普,IBM,英特尔,微软等公司)。
图 1. InfiniBand 系统网络
![InfiniBand 系统网络](https://i-blog.csdnimg.cn/blog_migrate/79d4e049ca997ce2d95f3add8bebc6e1.png)
从这张图中我们不难看出,InfiniBand 系统网络主要由两个核心部件组成:主机通道适配器(Host Channel Adapter)和 InfiniBand 交换机。其中,HCA 为主机设备提供一个接口用于支持所有 InfiniBand 定义的操作,而交换机则用于将一个端口接收到的 InfiniBand 报文转发到另一个端口,它支持单播和多播两种机制。
随着 InfiniBand 技术的应用越来越广,做为应用基础的 InfiniBand 配置问题也日益成为人们关注的热点,下面本文将对 InfiniBand 在 Linux 系统中的配置做一个具体的介绍,包括 InfiniBand 在 Red Hat Enterprise Linux 5.3 和 SLES11 系统中的网卡驱动的安装以及 IPoIB 的配置方法。
Red Hat 产品是从 Red Hat Enterprise Linux 5.3 开始正式在内核中集成对 InfiniBand 网卡的支持,并且将 InfiniBand 所需的驱动程序以及库文件打包到发行 CD 里, 所以对于有 InfiniBand 应用需求的 Red Hat 用户,我们推荐其采用 Red Hat Enterprise Linux 5.3 及其以后的系统版本。
- 安装 InfiniBand 驱动程序
在安装 InfiniBand 驱动程序之前,请确认 InfiniBand 网卡已经被正确地连接或分配到主机。然后,从 Red Hat Enterprise Linux 5.3 的发布 CD 中获得 Table1 中给出的 rpm 文件,并根据上层应用程序的需要选择安装相应的 32 位或 64 位软件包。
表 1. RedHatEL5.3 中 InfiniBand 库文件列表
openib-*. el5.noarch.rpm 32bit libibcm-*.el5.ppc.rpm
libibcm-devel-*.el5.ppc.rpm
libibcm-static-*.el5.ppc.rpm
libibcommon-*.el5.ppc.rpm
libibcommon-devel-*.el5.ppc.rpm
libibcommon-static-*.el5.ppc.rpm
libibmad-*.el5.ppc.rpm
libibmad-devel-*.el5.ppc.rpm
libibmad-static-*.el5.ppc.rpm
libibumad-*.el5.ppc.rpm
libibumad-devel-*.el5.ppc.rpm
libibumad-static-*.el5.ppc.rpm
libibverbs-*.el5.ppc.rpm
libibverbs-devel-*.el5.ppc.rpm
libibverbs-static-*.el5.ppc.rpm
libibverbs-utils-*.el5.ppc.rpm64bit libibcm-*.el5.ppc64.rpm
libibcm-devel-*.el5.ppc64.rpm
libibcm-static-*.el5.ppc64.rpm
libibcommon-*.el5.ppc64.rpm
libibcommon-devel-*.el5.ppc64.rpm
libibcommon-static-*.el5.ppc64.rpm
libibmad-*.el5.ppc64.rpm
libibmad-devel-*.el5.ppc64.rpm
libibmad-static-*.el5.ppc64.rpm
libibumad-*.el5.ppc64.rpm
libibumad-devel-*.el5.ppc64.rpm
libibumad-static-*.el5.ppc64.rpm
libibverbs-*.el5.ppc64.rpm
libibverbs-devel-*.el5.ppc64.rpm
libibverbs-static-*.el5.ppc64.rpm
libibverbs-utils 64bit rpm is not available in RedHatEL5.3
另外,对于不同类型的 InfiniBand 网卡,我们还需要安装一些特殊的驱动程序,例如Galaxy1/Galaxy2类型的 InfiniBand 网卡,就需要安装 ehca 相关的驱动。在这里我们给出三种常见 InfiniBand 网卡及其所需驱动的对应关系供您参考,见表二。
表 2. 常见 InfiniBand 网卡类型及所需驱动对应表
libehca
(for Galaxy1/Galaxy2 support)32bit libehca-*.el5.ppc.rpm
libehca-static-*.el5.ppc.rpm64bit libehca-*.el5.ppc64.rpm
libehca-static-*.el5.ppc64.rpmlibmthca
(for Mellanox InfiniHost support)32bit libmthca-*.el5.ppc.rpm
libmthca-static-*.el5.ppc.rpm64bit libmthca-*.el5.ppc64.rpm
libmthca-static-*.el5.ppc64.rpmlibmlx4
(for Mellanox ConnectX support)32bit libmlx4-*.el5.ppc.rpm
libmlx4-static-*.el5.ppc.rpm64bit libmlx4-*.el5.ppc64.rpm
libmlx4-static-*.el5.ppc64.rpm
- 启动 openibd 服务
在 Red Hat Enterprise Linux 5.3 系统中,openibd 服务在默认情况下是不打开的,所以在安装完驱动程序之后,配置 IPoIB 网络接口之前,我们需要先使能 openibd 服务以保证相应的驱动被加载到系统内核。具体方法如下:
清单 1. 启动 openibd 服务
# /etc/init.d/openibd start Loading OpenIB kernel modules: [ OK ]
启动 openibd 服务后,可用以下命令检查相应的驱动是否已加载,以 Galaxy2 网卡为例应得到以下输出。
清单 2. Openibd 服务状态示例
# /etc/init.d/openibd status Low level hardware support loaded: ib_ehca Upper layer protocol modules: ib_iser ib_srp ib_sdp ib_ipoib User space access modules: rdma_ucm ib_ucm ib_uverbs ib_umad Connection management modules: rdma_cm ib_cm iw_cm Configured IPoIB interfaces: none Currently active IPoIB interfaces: none
此时,用 ifconfig 命令已经可以看到待配置的 ib 接口, 例如:
清单 3. Ifconfig 命令输出
# ifconfig -a ib0 Link encap:InfiniBand HWaddr 80:00:00:2C:FE:80:00:00:00:00:00:00:00:00:00:00:00:00:00:00 BROADCAST MULTICAST MTU:4092 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:256 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) ib1 Link encap:InfiniBand HWaddr 80:00:00:2E:FE:80:00:00:00:00:00:00:00:00:00:00:00:00:00:00 BROADCAST MULTICAST MTU:4092 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:256 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
但这种使能 openibd 服务的方法只在本次启动中生效,如果用户需要在系统重新启动后仍保持 openibd 使能,则需要使用 chkconfig 命令将其添加到系统服务列表中,如:
清单 4. 使用 chkconfig 添加 openibd 服务
# chkconfig --level 235 openibd on # chkconfig --list|grep openibd openibd 0:off 1:off 2:on 3:on 4:off 5:on 6:off
- 配置 IPoIB 网络接口
在 Red Hat Enterprise Linux 5.3 中配置 IPoIB 网络接口的方法与配置以太接口方法类似,即 /etc/sysconfig/network-scripts 路径下创建相应的 IB 接口配置文件,如 ifcfg-ib0, ifcfg-ib1 等。这里我们给出一个对接口 ib0 做简单 IPoIB 配置的例子以供参考。
清单 5. 接口配置文件示例
# cat /etc/sysconfig/network-scripts/ifcfg-ib0 DEVICE=ib0 BOOTPROTO='static' IPADDR=10.0.0.5 NETMASK=255.255.255.0 BROADCAST=10.0.0.255 NETWORK=10.0.0.0 TARTMODE='onboot'
IB 接口配置文件创建完成后,需要重新启动接口设备以使新配置生效,这时可以使用 ifconfig 命令检查接口配置是否已经生效,具体操作如下。
清单 6. 重启接口设备示例
[root@p6ihn05 network-scripts]# ifdown ib0 [root@p6ihn05 network-scripts]# ifup ib0 [root@p6ihn05 network-scripts]# ifconfig ib0 ib0 Link encap:InfiniBand HWaddr 80:00:00:2C:FE:80:00:00:00:00:00:00:00:00:00:00:00:00:00:00 inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::202:5500:1022:4a00/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:4092 Metric:1 RX packets:24 errors:0 dropped:0 overruns:0 frame:0 TX packets:63 errors:0 dropped:15 overruns:0 carrier:0 collisions:0 txqueuelen:256 RX bytes:8252 (8.0 KiB) TX bytes:16956 (16.5 KiB)
至此,IB 接口配置工作基本完成。如果需要进一步验证其工作是否正常,可以参考以上步骤配置另外一台节点,并在两个节点之间运行 ping 命令。如果 ping 成功,则说明 IPoIB 配置成功。
在 SuSE 产品中,虽然 SLES10 SP2 发布之初并没有提供对 InfiniBand 的正式支持,但随后发行的 SLES10 SP2 Update1 版本里却包含了 InfiniBand 的全部驱动集合,这一支持更在 SLES11 里得到了完善和发展,其发布 CD 已包含了 InfiniBand 相关的 OFED 驱动和管理工具。所以对于有 InfiniBand 应用需求的 SuSE 用户,我们推荐其采用 SLES11 及其以后的系统版本。
- 安装 InfiniBand 驱动程序
在安装 InfiniBand 驱动程序之前,请确认 InfiniBand 网卡已经被正确地连接或分配到主机。然后,从 SLES11 的发布 CD/DVD 中获得 Table3 中给出的 rpm 文件,并根据上层应用程序的需要选择安装相应的软件包。
表 3. SLES11 中 InfiniBand 库文件列表
Platforms Driver/Library SLES11 ofed-*.ppc64.rpm
ofed-kmp-default-*.ppc64.rpm
ofed-kmp-ppc64-*.ppc64.rpm
opensm-*.ppc64.rpm
libcxgb3-rdmav2-*.ppc64.rpm
libehca-rdmav2-*.ppc64.rpm
libibcm-*.ppc64.rpm
libibcommon1-*.ppc64.rpm
libibmad-*.ppc64.rpm
libibumad-*.ppc64.rpm
libibverbs-*.ppc64.rpm
libipathverbs-*.ppc64.rpm
libmlx4-rdmav2-*.ppc64.rpm
libmthca-rdmav2-*.ppc64.rpm
librdmacm-*.ppc64.rpm
libsdp-*.ppc64.rpm
mpi-selector-*.ppc64.rpm
mstflint-*.ppc64.rpm
libibverbs-devel-*.ppc64.rpm
(Note: libibverbs-devel-*.ppc64.rpm is in SLES 11 SDK ISO)
虽然 SLES11 对 InfiniBand 提供了更好的支持,但仍有部分用户的应用是建立在 SLES10 SP2 系统之中的。所以,在这里我们也给出了 SLES10 SP2 系统中需要加载的 InifiniBand 库和驱动包,详见表 4 。
表 4. SLES10SP2 中 InfiniBand 库文件列表
Platforms Driver/Library SLES10SP2 libcxgb3-64bit-*.ppc.rpm
libcxgb3-devel-*.ppc.rpm
libcxgb3-devel-64bit-*.ppc.rpm
libehca-*.ppc.rpm
libehca-64bit-*.ppc.rpm
libehca-devel-*.ppc.rpm
libehca-devel-64bit-*.ppc.rpm
libibcm-*.ppc.rpm
libibcm-64bit-*.ppc.rpm
libibcm-devel-*.ppc.rpm
libibcm-devel-64bit-*.ppc.rpm
libibcommon-*.ppc.rpm
libibcommon-64bit-*.ppc.rpm
libibcommon-devel-*.ppc.rpm
libibcommon-devel-64bit-*.ppc.rpm
libibmad-*.ppc.rpm
libibmad-64bit-*.ppc.rpm
libibmad-devel-*.ppc.rpm
libibmad-devel-64bit-*.ppc.rpm
libibumad-*.ppc.rpm
libibumad-64bit-*.ppc.rpm
libibumad-devel-*.ppc.rpm
libibumad-devel-64bit-*.ppc.rpm
libibverbs-*.ppc.rpm
libibverbs-64bit-*.ppc.rpm
libibverbs-devel-*.ppc.rpm
libibverbs-devel-64bit-*.ppc.rpm
libipathverbs-*.ppc.rpm
libipathverbs-64bit-*.ppc.rpm
libipathverbs-devel-*.ppc.rpm
libipathverbs-devel-64bit-*.ppc.rpm
libmlx4-*.ppc.rpm
libmlx4-64bit-*.ppc.rpm
libmlx4-devel-*.ppc.rpm
libmlx4-devel-64bit-*.ppc.rpm
libmthca-*.ppc.rpm
libmthca-64bit-*.ppc.rpm
libmthca-devel-*.ppc.rpm
libmthca-devel-64bit-*.ppc.rpm
librdmacm-1.0.6-*.ppc.rpm
librdmacm-64bit-*.ppc.rpm
librdmacm-devel-*.ppc.rpm
librdmacm-devel-64bit-*.ppc.rpm
libsdp-*.ppc.rpm
libsdp-64bit-*.ppc.rpm
libsdp-devel-*.ppc.rpm
libsdp-devel-64bit-*.ppc.rpm
mpi-selector-*.ppc.rpm
mstflint-*.ppc.rpm
mvapich2-*.ppc.rpm
mvapich2-64bit-*.ppc.rpm
mvapich2-devel-*.ppc.rpm
mvapich2-devel-64bit-*.ppc.rpm
ofed-1.3-*.ppc.rpm
ofed-cxgb3-NIC-kmp-ppc64-*.ppc.rpm
ofed-doc-*.ppc.rpm
ofed-kmp-ppc64-*.ppc.rpm
open-iscsi-*.ppc.rpm
opensm-*.ppc.rpm
opensm-64bit-*.ppc.rpm
opensm-devel-*.ppc.rpm
opensm-devel-64bit-*.ppc.rpm
perftest-*.ppc.rpm
qlvnictools-*.ppc.rpm
rds-tools-*.ppc.rpm
release-notes-as-*.ppc.rpm
ruby-*.ppc.rpm
sdpnetstat-*.ppc.rpm
srptools-*.ppc.rpm
tvflash-*.ppc.rpm
- 启动 openibd 服务及配置 IPoIB 网络接口
在 SLES11 系统中,启动 openibd 服务以及配置 IPoIB 网络接口的方法与 RedHat 基本类似,唯一不同的是接口配置文件的位置。在 SLES11 中,接口配置文件位于 /etc/sysconfig/network 目录下,下面是一个简单配置的例子仅供读者参考。
清单 7. 接口配置文件示例
# cat /etc/sysconfig/network/ifcfg-ib0 DEVICE=ib0 BOOTPROTO='static' IPADDR=20.0.0.5 NETMASK=255.255.255.0 BROADCAST=20.0.0.255 NETWORK=20.0.0.0 STARTMODE='onboot'