利用 Linux 通道捆绑来提升 IBM InfoSphere Streams 性能

您是否想知道,Linux® 通道绑定是否支持使用 IBM® InfoSphere® Streams 获得更快的吞吐量?我们在 Red Hat Enterprise Linux 5.5 版上运行 InfoSphere Streams 2.0.0.2 版时就回答了这个问题。本文将从较高的层次介绍通道绑定的概念,如何设置测试环境和我们观察到的结果。在我们的实验中,通道绑定将带宽提高达 68%。

Denton Hatzenbihler, 顾问软件工程师, IBM

Denton HatzenbihlerDenton (Denny) Hatzenbihler 在 IBM 拥有 34 年多的工作经验。他最初在 IBM 从事制造工程工作,主要研究测试设备各部分的硬件和微代码设计,以及为 System 36 和 38 开发测试软件和流程。他随后加入了研发实验室,主要职责包括在 Facsimile Support 400 上开发 TCP/IP 通信代码、在 I/O 设备驱动程序中的 AS/400 System License Internal Code 上开发 C++ 代码,以及将各种 Lotus 产品移植到 iSeries(包括 Domino HTTP 服务器、Sametime 服务器和 Lotus Workplace)。此外,他为 System i Lab Services 团队就各种项目提供指导和开发代码,这些项目主要与各种客户的安全性、单一登录和应用程序设计解决方案相关。他目前在 InfoSphere Streams 研发团队工作,拥有北达科他州立大学电气和电子工程专业学士学位。



Richard P. King, 高级程序员, IBM

Richarc King 的照片Richard King 已加入 InfoSphere Streams 团队多年。他 1977 年进入 IBM,担任 System/38 开发的助理程序员。自从 1981 年调至约克镇 IBM Thomas J. Watson Research Center 的研究部门以来,他参与了多个项目,包括 IBM Sysplex Coupling Facility 的设计和开发。Richard 拥有康奈尔大学 (Cornell University) 工业工程和运筹学专业的学士学位, 以及西北大学 (Northwestern University) 工业工程专业的硕士学位。



Wesley Most, 软件工程师, IBM

Wesley MostWesley Most 于 2004 年加入 IBM 担任软件工程师,为 InfoSphere Streams 集群提供支持。他是 Thomas J. Watson 研究中心 Watson IS 部门的成员。他在系统、网络和存储的架构、管理和性能调微方面担任主管职位,为研发工作提供支持。他拥有康涅狄格大学的计算机科学和工程专业学士学位。



Mike Oberholtzer, 高级软件工程师, IBM

Mike OberholtzerMike Oberholtzer 于 1984 年加入 IBM 担任软件程序员,主要研究 IBM System/36 上的测试磁带设备。他于 1986 年调到 IBM OS/400 操作系统部门研究设备支持,并于 1989 年调到备份和恢复支持部门。自 1993 年他开始研究 IBM OS/400 Integrated File System,并担任各种开发和项目领导职位,在 2008 年他调到 InfoSphere Streams 部门担任各种与开发和测试相关职位。他拥有密歇根理工大学计算机科学专业的学士学位。



2012 年 6 月 11 日

免费下载:IBM® InfoSphere Streams V2 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

概述

本文探讨 Red Hat Enterprise Linux 上的通道绑定对 IBM InfoSphere Streams 吞吐量和延迟的影响。将介绍如何使用 Red Hat Enterprise Linux 系统设置和配置通道绑定环境,可从在此环境中运行的 InfoSphere Streams 应用程序获得怎样的性能改进。目标读者为熟悉 InfoSphere Streams 和 Linux 网络接口配置并具备相应技能的人群。


通道绑定是什么?

通道绑定 (Channel bonding) 这个术词用于描述在两个网络接口之间拆分单个数据流,同时为应用程序层提供单个接口的过程。通过利用此技术,可实现更高的数据吞吐量,因为数据可同时在两个网络接口卡上流动。通道绑定可用于 InfoSphere Streams 支持的所有 Red Hat Enterprise Linux 内核。我们测试了一种通道绑定设置,并解释所观察到的结果。

请参阅 参考资料 一节,获取有关通道绑定的 Red Hat Enterprise Linux 文档的链接。


设置通道绑定

硬件

要在 1Gbps 连接上通过通道绑定实现最佳的性能结果,请考虑以下硬件需求:

  • 1Gbps 交换机或具有较高的过度订阅比率的更大交换机上的一个线路卡
  • 具有两个 1Gbps Ethernet 连接的两个支持 Linux 的系统

    备注:如果使用的是刀片服务器,在机架中使用穿透 (pass-through) 模块。由于交换机中用于调解流量的算法的原因,交换机模块可能不具有最佳的性能。

在我们的测试环境中,Cisco 6509 交换机构成了私有集群网络的 1Gbps 主干网。为了实现各个系统的最大性能,我们使用了 WS-X6748-GE-TX 线路卡。这些线路卡是高性能卡(每槽 40Gbps ),为卡上的所有 48 个端口提供了接近 1Gbps 的速度。对于本测试,交换运行 Cisco 的 IOS 版本 12,线路卡具有最新的固件。如果您的 Cisco 交换机运行 NX-OS 或者使用另一家供应商的产品,这些命令可能需要修改或者可能完全不同。请向您的网络管理员咨询寻求帮助。

对于下面列出的性能数字,网络交换机中未使用任何特殊的配置。尽管一些供应商交换机支持链路聚合控制协议 (Link Aggregation Control Protocol, LACP),一种纯操作系统的绑定配置可获得更高的性能结果。因为现代的硬件可轻松处理一些问题(如重新排序乱序的包)而不会对性能造成任何显著的影响,所以没有必要依赖交换机硬件来执行此工作。

图 1. InfoSphere Streams 通道绑定测试配置
该图显示了 InfoSphere Streams 测试设置,Streams App A 位于左侧,Streams App B 位于右侧,它们通过 Cisco 6509 网络连接

软件

从软件的角度讲,您需要的所有软件都已包含在 Red Hat Enterprise Linux 5 发行版中。要在您的环境为每台机器设置通道绑定,您需要调整网络配置并将链接聚合在交换机中。为了简化这些说明,我们将假设您将进行通道绑定的任何服务器配置了 Red Hat Enterprise Linux 5 并在构建时定义了两个网络接口中的一个。在我们的示例中,eth0 在最初设置,/etc/sysconfig/network-scripts/ifcfg-eth0 类似于清单 1。

清单 1. /etc/sysconfig/network-scripts/ifcfg-eth0
              DEVICE=eth0
            
HWADDR=E4:1F:13:78:FE:98
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.6.24.43
NETMASK=255.255.252.0
DNS1=10.6.24.11

设置通道绑定软件涉及到 4 步:

  1. 更改 /etc/sysconfig/network-scripts 中的 ifcfg-eth0
  2. 更改 /etc/sysconfig/network-scripts 中的 ifcfg-eth1
  3. 在 /etc/sysconfig/network-scripts 中创建一个新 ifcfg-bond0
  4. 描述系统的 “绑定”

备注:最好在关闭接口时执行此工作。如果在接口运行时执行,系统将发出警告,因为 eth0 现在是一个从属服务器,但您将获得正确的网络配置。您将发现重新启动将花更长时间。

步骤 1:对于 ifcfg-eth0,将 BOOTPROTO 行更改为 none。我们将删除与 IPADDR、NETMASK 和 DNS 相关的行。此信息将保存在 ifcfg-bond0 文件中,所以不会丢失重要细节。针对 ifcfg-eth0 的新行如下所示:

              MASTER=bond0
            
SLAVE=yes
USERCTL=no

步骤 2:对于 ifcfg-eth1,我们将编辑系统在配置时建立的未使用的默认配置:

              DEVICE=eth1
            
BOOTPROTO=dhcp
ONBOOT=no
HWADDR=e4:1f:13:78:fe:9a

再一次,我们像对 eth0 接口所做的一样更改 BOOTPROTO 行,添加从 MASTER、SLAVE 和 USERCTL 开始的 3 行。我们还需要将 ONBOOT 更改为 yes

步骤 3:我们现在将通过新 ifcfg-bond0 文件定义绑定。使用相同的网络信息,此文件将类似于:

              DEVICE=bond0
            
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.6.24.43
NETMASK=255.255.252.0
DNS1=10.6.24.11
USERCTL=no

步骤 4:因为绑定将被视为一个具有自己的内核模块的新网络设备,我们需要为 Linux 提供一些有关此新 “设备” 的信息。我们将在 /etc/modprobe.d 中创建一个名为 bonding.conf 的文件。在该文件中,我们添加以下两行:

             alias bond0 bonding
             
options bond0 mode=0 miimon=100

请参阅 参考资料 获取有关通道绑定的 Red Hat Enterprise Linux 文档。


测试结果

环境

我们使用两个运行 Red Hat Enterprise Linux 5.5 的机器实现一个通道绑定环境。每个机器拥有 8 个运行在 2.93 GHz 的 Intel Xeon CPU X5570 处理器。我们使用了两个 1Gbps NIC,并通过一个 Cisco 6509 交换机对它们进行通道绑定。请参阅 图 1

因为我们的目标是测试性能,我们选择名为 Balance Round Robin (balance-rr) 的绑定方法。一种使用通道绑定模式 balance-rr 改进吞吐量的方法是更改 TCP 对无序传送的容错率。通过提高对无序传送的容错率,您可以减少 TCP 要求重传包的频率。对无序包的容错率可通过设置 tcp_reordering sysctl 参数来调整。对于此测试环境,我们将该值设置为 127,利用以下 Linux 命令:sysctl -w net.ipv4.tcp_reordering=127

将该值设置为 127,实际上完全禁用了重新传输。这样做的缺点是会提高 TCP 的 CPU 成本,并且 TCP 连接将会处于一种阻塞状态。

吞吐量

吞吐量测试是一个简单的测试,一个机器上的用户定义的运算符将元组发送到不同机器上的接收运算符。接收运算符简单地统计传入的元组。除了统计,它还会在收到第一个和最后一个元组时存储当前时间戳。确定第一个和最后一个时间戳之间的间隔,可得出接收所有元组所花的时间。

吞吐量 = (元组数量)/(接收这些元组所花的时间)

IBM 使用 TCP 传输配置得到了以下测试结果。

图 2. TCP 传输的 InfoSphere Streams 吞吐量
该图显示 TCP 传输的 InfoSphere Streams 吞吐量增加了 60%

然后在(配置为利用在 TCP 上的 LLMRUM 传输的)InfoSphere Streams 应用程序上运行相同测试。

图 3. LLMRUMTCP 传输的 InfoSphere Streams 吞吐量
该图显示 LLMRUMTCP 传输的 InfoSphere Streams 吞吐量提升了将近 40%

从前面的图中可以看出,利用 TCP,吞吐量增加了大约 60%。利用 TCP 上的 LLMRUM,吞吐量增加了接近 40%。LLM 的吞吐量更低,因为 LLM 自己的调度可能会影响 TCP 对传输到两个 NIC 的流量的调度。

延迟结果

延迟测试度量往返延迟,使用一个源运算符和相同机器上的一个接收运算符,以及不同机器上的一个函子 (Functor) 运算符,后者将来自源运算符的元组传递给接收运算符。延迟的计算方式为元组进入接收运算符的时间减去元组离开源运算符的时间。这两个时间的差非常准确,因为使用了相同机器的时钟来获取两个度数,因此消除了任何相对的时钟偏差。

往返延迟 =(相同机器上的元组结束时间 - 元组开始时间)

在测试期间,IBM 在以大约每秒发送 5,000 个元组的速度得到了以下延迟结果。

图 4. 使用 TCP 传输的 InfoSphere Streams 延迟
该图显示,对于较小的元组,使用 TCP 传输的 InfoSphere Streams 延迟具有很小的变化
图 5. 使用 LLMRUMTCP 传输的 InfoSphere Streams 延迟
该图显示,对于较小的元组,使用 LLMRUMTCP 传输的 InfoSphere Streams 延迟具有很小的变化

从上面的图中可以看到,对于较小的元组,通道绑定对延迟的影响很小。对于较大的元组,延迟会增加,原因可能在于无序包的重传。


结束语

上面的实验表明,影响性能的关键因素是元组大小和传输配置。然而,在许多环境中,通道绑定可能是提高 IBM InfoSphere Streams 上的应用程序吞吐量的一个有用工具。

参考资料

学习

获得产品和技术

  • 使用 IBM 产品评估试用版软件 构建您的下一个开发项目,可直接从 developerWorks 下载获得。
  • 现在可以免费使用 DB2。下载 IBM 软件下载:IBM DB2 Express-C 10.1,这是为社区提供的 DB2 Express Edition 的免费版本,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management, Linux
ArticleID=820613
ArticleTitle=利用 Linux 通道捆绑来提升 IBM InfoSphere Streams 性能
publish-date=06112012