Ice和CORBA的性能比较(第一部分)
简介
Ice是一个高效的中间件平台。它在潜伏时延和数据传输方面都有着极其优秀的性能。此外,Ice提供了一些有用的特性,使其能比其他中间件,例如CORBA,更快的技术,这些特性的具体例子有批量单向调用、高效的时件分发和低速链路数据压缩。
我们将Ice和TAO进行了广泛的性能比较。TAO是现在应用最广的ORB,大多数的人都认为它是众多可用的CORBA实现中速度最快的。
测试的类型
Ice和CORBA的性能差异可以分为实现质量的性能差异和内在的优秀设计导致的性能差异两类。
实现质量的差异适合测试中间件之间相同或至少很相似的某个功能的性能。例如潜伏时延测试就是属于这类测试,因为对于各自的平台,很多应用广泛的功能是相同的。内在设计的差异适合测试一个平台提供了的,而另外一个平台没有相应等价物的特性。例如在低速连接上的吞吐量的测试就是这样的测试,因为CORBA没有提供数据压缩功能。
对于第一类的测试,我们尽可能做到公平,也就是,我们使用相同的硬件,用相同的编译选项编译TAO和Ice,使用相同的并发模型来测试比较。具体的测试配置可见下文的“测试设置”。
对于第二类测试,由于Ice本身的设计而获得的性能优势,因为CORBA的ORB没有简单的方法提供等价的设计,因此这样的测试最好看作是体系或设计上的差异,而不是编程实现质量上的差异。
测试设置
为了公平测试,我们使用了Ice和TAO各自非beta的最新版本,Ice是2.1.0版,TAO是1.4版。我们在linux和windowsxp下进行了测试,两种情况下用的都是Dell Dimension 4500,cpu是2.4Ghz的Pentium4,超线程技术不打开,内存是512MB。
Linux上的测试,我们用Fedora Core 3和Gcc 3.3.5编译器(TAO1.4不支持GNU C++ 3.4版)。我们的测试源代码用-O3 -DNDEBUG -D_REENTRANT编译选项来编译。Windowsxp上的测试,我们使用了Windows XP Home edition with Service Pack 2,并使用Visual C++6.0 with Service Pack 5版编译,代码用/O2 /DNDEBUG选项来编译。
为了提高结果的可比较性,很重要的一点是使用等价的并发模型。我们使用了线程池模型,因为这是最常用的多线程编程模型。我们为Ice和TAO配置了4个工作线程。
TAO的配置文件svc.conf里面设置是这样的:
static Client_Strategy_Factory "-ORBClientConnectionHandler MT"
Ice配置为:
Ice.ThreadPool.Server.Size=4
Ice.ThreadPool.Server.SizeMax=4
在单向调用测试上,我们使用了TAO的SYNC_WITH_TRANSPORT,它提供和Ice单向调用相同的服务质量。除了上面的那些设置,我们使用loopback网络接口,客户程序和服务器程序运行在同一台机器上。
所有测试的结果都表示成每个请求的耗时,也就是值越小,性能越好(另一种方法是测试每秒处理完请求数)。我们每个测试都运行N次,使用最好的N/2的结果的平均值,另外的N/2的差的结果被丢弃,这种方法避免了因操作系统的其他活动而影响了测试程序的运行而导致的性能测量误差。
性能的差值被计算为(TAO耗时-Ice耗时)/Ice耗时,用百分比表示。例如50%的差值表示Ice的速度是TAO的1.5倍。
性能测试指数
我们进行了下面的测试:
1、潜伏时延测试 2、吞吐量测试 3、低速连接性能测试 4、时间分发性能测试
性能小结
下面的表格列出了所有的性能测试比较结果:
正如数据所显示,Ice在除了一项的所有其他测试上都获得了性能的得益。很多的性能得益是因为Ice的实现质量,也有一些反映了Ice和CORBA基本设计的不同。后续的几篇文章将对各个性能测试的详细情况作描述。
测试大项目 | 测试子项 | linux下的速度差别 | WindowsXP下的差别 |
潜伏时延 | 双向调用 | 145% | 77% |
双向AMI调用 | 220% | 136% | |
单向调用 | 322% | 83% | |
批量单向调用 | 1609% | 368% | |
吞吐量 | 字节序列 | -9% | -39% |
结构序列 | 23% | 78% | |
低速链路 | 文档传输 | 138% | 138% |
结构体传输 | 341% | 341% | |
事件分发 | 潜伏时延 | 271% | N/A |
无缓冲吞吐量 | 302% | N/A | |
缓冲的吞吐量 | 588% | N/A |
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=2160870
联系客服