InfiniBand 技术及其在 Linux 系统中的配置简介

       简介:随着服务器处理速度的不断加快,用户对提升网络传输速度的需求也越来越紧迫,传统意义上的输入 / 输出技术, PCI、以太等,已经无法满足这种需求。如何更为有效的提高数据传输速度,增加有效带宽成为摆在人们面前必须解决的一个重大问题。 InfiniBand 标准就是在这种情况下应运而生的,它在很大程度上解决了传统输入 / 输出架构的传输瓶颈问题 , 运行速度可达到每端口 2.5Gb/s 10Gb/s 目前,这项技术已经广泛应用到高性能计算等领域,Linux 操作系统内核也对其提供了全面的支持,本文将逐一介绍 InfiniBand 技术架构,以及如何在 Red Hat Enterprise Linux 5.3 SLES11 系统中配置 InfiniBand 网络设备,包括网卡驱动的安装以及 IPoIBIP over InfiniBand)接口配置。

前言

       随着服务器处理速度的不断加快,用户对提升网络传输速度的需求也越来越紧迫,传统意义上的输入 / 输出技术, PCI、以太等,已经无法满足这种需求。如何更为有效的提高数据传输速度,增加有效带宽成为摆在人们面前必须解决的一个重大问题。 InfiniBand 标准就是在这种情况下应运而生的,它在很大程度上解决了传统输入 / 输出架构的传输瓶颈问题 , 运行速度可达到每端口 2.5Gb/s 10Gb/s

目前,这项技术已经广泛应用到高性能计算等领域,Linux 操作系统内核也对其提供了全面的支持,本文将逐一介绍 InfiniBand 技术架构,以及如何在 Red Hat Enterprise Linux 5.3 SLES11 系统中配置 InfiniBand 网络设备,包括网卡驱动的安装以及 IPoIBIP over InfiniBand)接口配置。

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 技术及其在 Linux 系统中的配置简介_第1张图片

        从这张图中我们不难看出,InfiniBand 系统网络主要由两个核心部件组成:主机通道适配器(Host Channel Adapter)和 InfiniBand 交换机。其中,HCA 为主机设备提供一个接口用于支持所有 InfiniBand 定义的操作,而交换机则用于将一个端口接收到的 InfiniBand 报文转发到另一个端口,它支持单播和多播两种机制。


InfiniBand Linux 系统中的配置

        随着 InfiniBand 技术的应用越来越广,做为应用基础的 InfiniBand 配置问题也日益成为人们关注的热点,下面本文将对 InfiniBand Linux 系统中的配置做一个具体的介绍,包括 InfiniBand Red Hat Enterprise Linux 5.3 SLES11 系统中的网卡驱动的安装以及 IPoIB 的配置方法。

InfiniBand RedHat 中的配置

        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.rpm

64bit

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.rpm

64bit

libehca-*.el5.ppc64.rpm
libehca-static-*.el5.ppc64.rpm

libmthca
(for Mellanox InfiniHost support)

32bit

libmthca-*.el5.ppc.rpm
libmthca-static-*.el5.ppc.rpm

64bit

libmthca-*.el5.ppc64.rpm
libmthca-static-*.el5.ppc64.rpm

libmlx4
(for Mellanox ConnectX support)

32bit

libmlx4-*.el5.ppc.rpm
libmlx4-static-*.el5.ppc.rpm

64bit

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 配置成功。