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

时间:2009-11-11   来源:   网友评论:0   人气: 954 作者:

前言

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

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

从这张图中我们不难看出,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 配置成功。

InfiniBand 在 SuSE 中的配置

在 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'
    			

    其它配置步骤与 RedHat 完全相同,这里不再复述。

小结

本文介绍了 InfiniBand 技术的基本构架,以及在 Linux 系统中如何对 InfiniBand 设备进行网卡驱动的安装以及 IPoIB(IP over InfiniBand)接口配置,从而为上层高性能计算应用软件的运作提供了必要的环境基础。

参考资料

作者简介

 

孙靖,IBM 中国软件开发中心 HPC 部门的软件工程师,主要从事集群系统管理软件的相关研发工作。


 

王磊,IBM 中国软件开发中心 HPC 部门的软件工程师,主要从事集群系统管理软件的相关研发工作。


 

罗明是一名IBM中国软件开发中心的软件工程师。从事多年 IBM 集群管理软件 CSM 的开发和测试工作,对高性能集群系统和 IBM POWER 系列产品拥有丰富的管理经验。目前,他负责易于管理的高性能计算组合软件包的开发工作,致力于提高高性能集群的易用性。

文章评论