- 论坛徽章:
- 0
|
不懈的斗士(AMD处理器)
在上一篇文章中,我们集中介绍了测试所用的硬件平台,现在我们正式进入此文的枋心部分,了解一下Opteron系统在各种测试环境下的表现。
采用Opteron处理器的Webserver
我们的第一项任务就是现实的WEB服务器运行环境测试。Webserver在两种环境下进行测试:一种是4-5个客户机(的一种客户机:Duron 1300 PC)连接到我们的千兆交换机上的8个100M端口中的1个。这意味着我们将给服务器(连接到gigabit上行线路)带来40到50MB/秒的客户机网络流量。
![]()
4台客户机连接到Longshine千兆级上行交换机( gigabit uplink switch)
我们第二套客户机配置为1台P4 2.8GHz PC,通过一个UTP5线缆连接到服务器上集成的千兆级Intel RC82540EM。在这种环境下,理论上可以达到100MB/秒的客户机与服务器间的网络流量。通过这种方式,我们就可以知道更多的客户机或者更高的网络带宽是否会给服务器带来更高的性能。
采用2.8GHz Pentium 4的客户机使用的Debian Linux kernel version 2.4.20-686-smp(这是对Pentium 4 超线程技术进行了优化的版本,虽然名字还是686)。采用Duron处理器配置的客户机使用的Debian Linux kernel version 2.4.20-k7-smp(这是稳定的2.4 Linux kernel的针对Athlon 处理器进行了优化的版本)。
对于性能测试,我们采用了httperf与autobench(一种由Julian T.J.Midgley用Perl语言编写的软件)一起使用的方案。具体过程就是针对一台服务器运行多次httperf,每次都会增加每秒的请求数。这套程序的测试结果使我们能够确切地观察到当工作负荷逐渐增加的时候,系统性能的表现情况,直到达到系统的性能峰值。
![]()
Autobench 和 httperf正在运行中
每次测试中,每个连接发布5次请求。测试被设置为对耗时超过5秒的请求都产生一个超时(timeout)错误,在处理"压缩消息板索引"(compressed message board index)的情况下超时(timeout)为10秒。
不过我们还是得自己重编译httperf,因为它仅能在拥有1024个文件描述符的客户机上运行(这是个老的Unix系统的每用户限制)。我们自己编译的httperf就没有这些限制。
因此客户机按如下设置
ulimit -n 10000, set number of open files to 10000 (default 1024)
双Athlon服务器使用的是Debian Linux kernel version 2.4.20-k7-smp,双Xeon使用的是Debian Linux kernel version 2.4.20-686-smp,Opteron使用的是SUSE SLES 8 kernel 2.4.19。因为这些核心是在针对各个服务器处理器进行了优化的核心中最稳定的。我们相信这样的测试还是很公平的。如果你像我们这样设置参数,相同核心的不同版本的性能表现应该都差不多。
![]()
Opteron系统上的32位SUSE操作系统通过PSE能够支持64GB内存
服务器设置了如下的参数:
· ulimit -n 64000, set number of open files to 64000 (default 1024)
· shmmax = 512288000 or 512 MB, shared memory maximum (default 33 MB)
· net.core.optmem_max=100000, maximum amount of option memory buffers, default 10240
· net.core.rmem_default=131071, default receive socket buffer size, default 65535
· net.core.rmem_max=131071, maximum receive socket buffer size, default 131071
· net.core.wmem_default=1000000, default send socket buffer size, default 65535
· net.core.wmem_max=1000000, maximum send socket buffer size, default 131071
当把我们的测试方法和其他的配置对比,你会发现下列3项参数在其他地方是被关掉了的。
· net.ipv4.tcp_timestamps=1, turns TCP timestamp support on, (default)
· net.ipv4.tcp_sack=0, turn SACK support on, (default)
· net.ipv4.tcp_window_scaling=0, turn TCP window scaling support off, (default on)
我们决定打开这些特性来使webserver能够在一个高延迟的广域网上表现出更好的性能。的确,我们进行测试的局域网延迟是很低的,不过大部分的webserver都是部署在互联网上。互联网可以说是一个延迟最高的广域网,或者将webserver比作在一个非常大的局域网上的内部网(Intranet)服务器。
接下来是我们的消息板索引性能测试(message board index benchmarks)
性能测试软件包括:
· Caucho Technology's Resin 2.1.6
· Java Virtual Machine 1.4.1_02 SDK
· Sybase ASE 11.9.2 for Linux
这些测试软件测试的是一个现实网站的产品应用程序,并使用了相同的数据集。全套的平台正如下面的图表所示:
![]()
简单地讲,客户机运行httperf,然后产生许多"HTTP GET"请求。看看上面这幅图,"internet"就是我们的交叉线缆(crossover cable),或者说千兆级交换机(gigabit switch)。Resin或其他的webserver(绿色部分)接受请求然后将回复发回到客户端。Java应用程序(黄色部分)从对象缓存中提取数据并产生HTTP服务器需要发回客户端的回复内容。缓存由数据库中的数据组成(蓝色)。
利用了缓存的Java Webserver Benchmark: 消息板索引
操作系统: Linux 2.4.20 / 2.4.19
多线程: 打开
内存: 800 - 850 MB
不同测试间的误差 3-4%
最大网络流量: 最高 15 MB/秒
我们的第一项测试是CPU运算密集型的,因为需要对我们的消息板编写索引。由于内容没有压缩,还需要相当的网络流量的支持。
![]()
Opteron系统在这项测试中所向披靡。对Opteron系统来说,运行Java应用程序和构造多线程的消息索引就像是它最擅长的任务。Opteron系统比占据第二位的双Xeon系统快了38%。双 3GHz Xeon系统可能会比双2.8GHz Xeon系统快7%左右(时钟频率提高,性能也随之提高),但还是无法触及Opteron系统性能上的优势。
因为消息索引可能大到几百KB,并且是从数以千计的Java对象中创建的,这项测试在缓存和内存方面的负荷是相当大的。但是当我们考虑Opteron这方面的优势(每颗CPU拥有128位内存接口以及1MB L2 cache),Opteron系统所体现的性能就不足为奇了。
超线程技术当然也有所帮助,因为这项测试是高度多线程的,不过产生消息索引才是最为严重的瓶颈。
使用了缓存和压缩的Java Webserver Benchmark:消息板索引
操作系统: Linux 2.4.20 / 2.4.19
多线程: 打开
内存: 850- 900 MB
不同测试间的误差: 2-3%
最大网络流量: 最大 1 MB/秒
快速的java性能很不错,不过一个网站管理员最关心的问题之一还是带宽。有时候更高的带宽所需的花费是巨大的,所以使用更高的带宽可能就是个代价昂贵的提议。那么,为什么不在服务器上用gzip压缩内容,然后再发送给客户端?几乎每个现有的浏览器都支持经过gzip处理的内容。
![]()
在这项测试中,我们在将网页发送到客户端之前先进行压缩。进行压缩所带来的额外计算需要使得性能降低了一半,不过这也使得网络I/O下降到了原先的1/15。虽然性能降低了(服务器端),不过这样节约下来的的带宽10倍地弥补了损失的性能。并且我们可以常常通过在带宽花费上节省下来的钱购买更快的硬件设备来弥补性能上的差异(服务器端)。
先前的不带压缩的性能测试结果是由数据的大小决定的,而带压缩的测试结果就将性能重点转移到了运算上。这样的结果就是2.8 GHz P4 Xeon系统得以缩小与Opteron系统的巨大差距。
有趣地是,当使用了超线程特性的时候,系统性能反而下降了。使用了超线程P4系统和Xeon系统的性能都更差了。一个可能的合理解释就是,gzip占掉了相当一部分L2 cache,并占用了Java 线程的一部分缓存空间。压缩还使更多单元处于繁忙状态,这样就会减弱超线程技术在充分利用空闲线程中的作用。
接下来,我们将会总结一下我们的Java/Resin benchmark结果,然后来看看SPECjbb2000。
使用了缓存和压缩的Java Webserver Benchmark:双 Mac 篇
操作系统: Linux 2.4.20 / 2.4.19
多线程: 打开
内存使用量: 750 - 800 MB
不同测试间的误差: 5-7%
最大网络流量: 最高 2.5 MB/s
在接下来的测试中,我们并不需要产生索引/树结构,我们仅仅请求一篇18KB的文章。
![]()
现在我们去除了创建消息板索引的负担,能够进行处理的线程数急剧上升。这意味着主要的性能焦点转移到了1颗CPU能够多快地处理器一定数量地java 线程。使用了超线程技术的双P4 Xeon系统能够一次处理4条线程,在性能上超过所有其他系统。双Opteron在性能上位于第二位,但还是领先于没有使用超线程技术的双Xeon系统。
Opteron系统在SPECjbb2000 测试中的性能表现
操作系统: Linux 2.4.20 / 2.4.19
多线程: 打开
内存使用量: 1000 - 1150 MB
不同测试间的误差: 1-3%
最大网络流量: N/A,直接作用在服务器上
SPECjbb2000是由标准性能评估公司(Standard Performance Evaluation Corporation ,SPEC)开发的一套性能测试软件,它会模拟一个事务处理服务器。让SPEC来告诉你更多吧:
"SPEcjbb2000是作为一套强调中间层的3层系统的Java程序来实施的。所有的3层都是在同一个JVM(java虚拟机)上实施的。这些层模拟一个典型的商业应用程序,第一层的用户生成输入,并造成中间层执行一些业务逻辑,中间层又会调用第三层的数据库。在SPECjbb2000中,用户层会随意输入一些内容,但它会完全执行中间层的业务逻辑,而第三层则由二进制树结构来代表,而不是一个单独的数据库。
SPECjbb2000 是完全自我装载和自我驱动的(生成它自己的数据,生成它自己的多线程操作,并且不需要JRE以外的任何软件包)。
SPECjbb2000是从TPC-C中得到灵感的,并且在它的模式、输入的产生以及操作资料库中都大致遵循了TPC-C的规范。SPECjbb2000用Java class替代了数据库表,用Java 对象替代了数据记录。这些对象通过B-Trees(也是一种Java对象)和其他的数据对象保留在内存中。所以SPECjbb2000并不进行磁盘读写操作。因为没有采用数据库,它并不支持实施关系型数据库时的带有ACID属性的对象。SPECjbb2000仅使用Java同步机制来同步对于共享对象的多线程访问。又因为用户并不存在于外部客户系统中,所以SPECjbb2000也不需要任何网络IO操作。
虽然SPECjbb2000是由TPC-C而引发出来的,但与TPC-C是完全不可相比的。SPECjbb2000完全寄存于内存中,使用了完全不同的数据集尺寸,带来了不同的工作负荷,不需要进行磁盘I/O,并且没有思考时间(think time)。它拥有一套不同的运行和报告规则,一套不同的测量吞吐量的方法以及一套不同的度量衡。
在SPECjbb2000中,每个仓库只有一个活动的终端(或者客户)。一个仓库就是一个存储数据的单元。它大概包含了25M存放在B-tree中的数据。终端直接映射到Java线程。每条线程都按次序执行操作,而每个操作都是从操作库中按概率分配的。因为在整个测试期间,仓库的数目是不断上升的,所以线程的数目也不断上升。"
SPECjbb2000至少使用198-300MB的空间,所以我们通过设置-Xms/-Xmx JVM给了它1024MB的空间。我们还确保了JVM确实是服务器版JVM,而不是客户机版JVM(这两者都包含在1.4.1_02 HotSpot Java SDK中)。
![]()
SPEC是标准性能评估公司的注册商标(spec.org)
Opteron系统拥有相对其他竞争者41%的优势,并证明了它是一个非常优秀的事务处理CPU。
现在我们将转到关系型数据库管理系统(RDBMS)性能(SQL Server 2000)…… |
|