在2008年度的服务器横评中,我们一共征集到了来自国内外7家厂商的10款服务器参与测试。在测试过程中我们不止一次发现,用来作为基准对比服务器的DELL PE2900III性能非常出色(参见:极致性能 华硕RS162-E4服务器性能评测 性能特别出色 曙光I650-F服务器评测)。虽然这款服务器并不是最新最高端的配置,但是实际的对比测试结果表明——在多项测试项目中,基准服务器的性能都处于领先地位,特别是在文件服务器测试中的优势更为明显。
当时,我们估计差别出在基准服务器所使用的Intel 5000X芯片组身上,或许是由于5000X芯片组自带的Snoop Filter功能给性能带来了巨大的提升。因此,在横评测试环节结束之后,我们就开始着手对于这台基准服务器——DELL PE2900III进行全方位的测试,并将重点集中到了Snoop Filter功能身上。
DELL PE2900III服务器BIOS实拍图
Snoop Filter(探听过滤器)这一技术早期出现在IBM自己开发的X3芯片组中,随后英特尔Blackford芯片组中也引入了该功能。Snoop Filter的设计初衷是对于基于FSB前端总线架构的系统频繁的Snoop操作进行缓存、性能优化,缓解前端总线的通信压力,从而改善系统性能。
基于冯·诺依曼架构,多核心乃至多处理器的协同工作,保持缓存一致性(Cache Coherent)是很自然也是很合理的要求(不保持缓存一致性的话需要在对软件做出很大的改动),在现存主流的两种x86多处理器架构中,具有两种缓存一致性方案:AMD Operton和Nehalem代表的ccNUMA架构使用的Directory Cache Coherent,以及Nehalem-EP之前的Xeon代表的统一总线架构采用的Snoop操作。
在统一总线架构中,一个处理器的所有操作都可以被其他处理器看到,因此处理器可以利用一种叫做Snoop(侦听)的操作来监视总线上的缓存操作指令,当侦听到其他处理器的操作涉及到本处理器上的共享缓存页面的时候,就可以进行相关的操作来保持缓存一致性(通常,就是使本地的缓存页面变为Invalid无效)。
Snoop Filter(探听过滤器)运行示意图
单条总线上的Snoop操作很好处理,每一个处理器/处理内核都自行Snoop,然而在多条FSB总线下,Snoop操作需要总线之间转发所有的消息,随着处理器的增多,总线的负荷就越来越大(这也是Hub让位于Switch的原因之一),因此就导致了Snoop Filter出现。
从上图中我们可以看到,搭建在FSB之间的Coherency Engine(一致性处理引擎)管理着一个大的表格,记录着不同总线/不同处理器之间的缓存页面——事实上,Snoop缓存的是CPU二级缓存的标签和状态等信息,并对总线之间的转发进行控制,从而降低总线上的交通量,起到提升处理效率的目的。由于要协调多个处理器之间缓存的一致性,因此Snoop Filter缓存的容量要大于或等于所有处理器二级缓存容量之和才能发挥非常好的的作用。从而,Intel 5000X的Snoop Filter缓存容量为16MB(每个Intel 5400 Xeon的L2缓存容量8MB,两个处理器就是16MB),5400芯片组中Snoop Filter更是增加到了24MB。
那么具体到我们使用的这台基准服务器——DELL PE2900III,Snoop Filter功能究竟有多大的作用呢?下面我们将分别尝试开启/关闭Snoop Filter功能,看看它对于我们的测试工作能够造成多大的影响。
服务器规格一览 | |
主板 | DELL PE2900III BIOS:2.3.1 |
处理器 | Intel Xeon E5430*2 |
主频 | 2.33GHz |
芯片组 | Intel 5000X |
内存 | 2GB ECC DDR2 667 SDRAM *4 |
磁盘控制器 | DELL Perc 5/i RAID Controller |
硬盘 | Seagate Cheetah 15K.5 ST314655SS 146GB 16MB SAS * 3 |
硬盘设置 | RAID 5,条带大小64KB。所有磁盘分为三个分区,均为NTFS格式,系统默认簇,主分区50GB,其它分为扩展分区,共享文件夹、磁盘测试均在格式化后的扩展分区上进行 |
网卡 | Broadcom BCM5708C千兆网卡 X 2 |
操作系统 | Windows Server 2008 Enterprise x64 Edition SP1 |
主板驱动 | Intel Chipset Device Software 9.1.0.1012 |
网卡驱动 | Bcom_LAN_12.4_W2K3_8_64_A03 |
测试平台就是我们使用的DELL PE2900III双路至强服务器,它具备了两颗至强E5430处理器(主频为2.33GHz),使用了Intel 5000X芯片组主板,搭配了DELL Perc 5/i RAID Controller阵列卡。我们用三块Seagate 15K.5 146GB硬盘组件了RAID 5磁盘阵列,条带大小为64KB,读取设置为预读取,写入设置为write-back。我们将两块Broadcom BCM5708C千兆网卡组成Team,测试双网卡条件下的性能。
在软件方面,我们使用了Windows Server 2008 Enterprise x64 Edition SP1操作系统,相比Windows Sever 2003或者任何32bit版本的Windows操作系统来说提供了更为出色的性能。芯片组驱动使用了Intel Chipset Device Software 9.1.0.1012,网络驱动使用了DELL官方网站下载的Bcom_LAN_12.4_W2K3_8_64_A03(Sever 2003、Sever 2008通用)。接下来,我们将在这个平台环境下运行我们各项常规测试,考察Snoop Filter功能的优劣。
SPEC CPU2006 v1.01
SPEC是标准性能评估公司(Standard Performance Evaluation Corporation)的简称。SPEC是由计算机厂商、系统集成商、大学、研究机构、咨询等多家公司组成的非营利性组织,这个组织的目标是建立、维护一套用于评估计算机系统的标准。
SPEC CPU 2006是SPEC组织推出的一套CPU子系统评估软件,它包括CINT2006和CFP2006两个子项目,前者用于测量和对比整数性能,而后者则用于测量和对比浮点性能。计算系统中的处理器、内存和编译器都会影响最终的测试性能,而I/O(磁盘)、网络、操作系统和图形子系统对于SPEC CPU2006的影响比较小。
SPECfp测试过程中同时执行多个实例(instance),测量系统执行计算密集型浮点操作的能力,比如CAD/CAM、DCC以及科学计算等方面应用可以参考这个结果。SPECint测试过程中同时执行多个实例(instances),然后测试系统同时执行多个计算密集型整数操作的能力,可以很好的反映诸如数据库服务器、电子邮件服务器和Web服务器等基于整数应用的多处理器系统的性能。
SPEC CPU 2006的运行有着比较特别的要求,我们将会在后面详细解释。
ScienceMark v2.0 Membench
ScienceMark v2.0是一款用于测试系统特别是处理器在科学计算应用中的性能的软件,MemBenchmark是其中针对处理器缓存、系统内存而设计的功能模块,它可以测试系统内存带宽、L1 Cache延迟、L2 Cache延迟和系统内存延迟,另外还可以测试不同指令集的性能差异。
SiSoftware Sandra 2009
SiSoftware Sandra是一款可运行在32bit和64bit Windows操作系统上的分析软件,这款软件可以对于系统进行方便、快捷的基准测试,还可以用于查看系统的软件、硬件等信息。今年该软件推出了2007版,该版本新增了4项基准测试,包括Power Management Efficiency、Memory Latency、Physical Disks和CD-ROM and DVD这四个项目。另外,它还对于原有的几个基准测试模块进行升级,比如在Arithmetic benchmarks中增加了对SSE3 & SSE4 SSE4的支持,在Multi-Media benchmark中增加了对于SSE4的支持,另外还升级了File System benchmark和Removable Storage benchmark两个子项目。对于新的硬件的支持当然也是该软件每次升级的重要内容之一。SiSoftware Sandra所有的基准测试都针对SMP和SMT进行了优化,最高可支持32/64路平台,这也是我们选择这款软件的原因之一。
NetBench v7.03
NetBench是针对文件服务器的性能测试软件,影响NetBench性能的主要是服务器的磁盘子系统,服务器磁盘控制器、条带大小、读写缓存、硬盘类型、组建磁盘阵列模式、内存容量、网络拓朴结构等都会对测试结果有明显的影响。我们在被测服务器上设立了文件服务器,NetBench通过网络实验室中60个客户端来模拟网络中的PC向文件服务器所发出的文件传输请求,文件服务器则将存储在磁盘上的文件数据发送给相应的客户端。在测试过程中,客户端会以每四台一组的步进依次增加并且向服务器发送文件传输请求,测试结束后控制台收集数据并绘制出服务器的数据传输变化曲线。
Benchmarkfactory 4.6
大部分的服务器应用都同数据库有着密切的联系,因此我们今年开始着手在在服务器测试中加入对于数据库性能的测试。我们选择了Benchmark Factory 4.6软件和Microsoft SQL2005来测试不同的硬件平台在数据库应用中的表现。
我们选择了BF内置的标准测试脚本AS3AP,这项测试可用于对于ANSI结构化查询语言(SQL)关系型数据库进行测试,它可用于测试DBMS(单用户微机数据库管理系统),也可用于测试高性能并行或者分布式数据库。
ScienceMark v2.0是一款用于测试系统特别是处理器在科学计算应用中的性能的软件,MemBenchmark是其中针对处理器缓存、系统内存而设计的功能模块,它可以测试系统内存带宽、L1 Cache延迟、L2 Cache延迟和系统内存延迟,另外还可以测试不同指令集的性能差异。
ScienceMark Membench | ||
厂商 | Snoop Filter Enable | Snoop Filter Disable |
内存技术参数 | 2GB ECC DDR2 667 SDRAM *4 | 2GB ECC DDR2 667 SDRAM *4 |
L1带宽 | 55843.84 | 55432.88 |
L2带宽 | 16718.51 | 16728.93 |
内存带宽(MB/s) | 4591.66 | 3891.59 |
L1 Cache Latency(ns) | ||
32 Bytes Stride | 1.13 | 1.13 |
L2 Cache Latency(ns) | ||
4 Bytes Stride | 1.13 | 1.13 |
16 Bytes Stride | 1.50 | 1.50 |
64 Bytes Stride | 4.51 | 4.51 |
256 Bytes Stride | 4.51 | 4.51 |
512 Bytes Stride | 4.89 | 4.89 |
Memory Latency(ns) | ||
4 Bytes Stride | 1.13 | 1.13 |
16 Bytes Stride | 4.89 | 4.89 |
64 Bytes Stride | 20.68 | 20.30 |
256 Bytes Stride | 63.53 | 66.92 |
512 Bytes Stride | 72.18 | 72.55 |
Algorithm Bandwidth(MB/s) | ||
Compiler | 3133.02 | 3385.86 |
REP MOVSD | 3177.38 | 3436.83 |
ALU Reg Copy | 2628.89 | 3125.97 |
MMX Reg Copy | 2783.22 | 3227.43 |
MMX Reg 3dNow | - | - |
MMX Reg SSE | 3865.68 | 3861.96 |
SSE PAlign | 4313.21 | 3839.97 |
SSE PAlign SSE | 4291.19 | 3890.65 |
SSE2 PAlign | 4505.48 | 3838.82 |
SSE2 PAlign SSE | 4290.63 | 3891.59 |
MMX Block 4kb | 4131.85 | 3119.89 |
MMX Block 16kb | 4576.43 | 3429.49 |
SSE Block 4kb | 4132.20 | 3123.81 |
SSE Block 16kb | 4591.66 | 3435.98 |
我们将Snoop Filter功能分别设置为开启(enable)和关闭(disable),对于这两种情况下的服务器内存性能进行了测试。很明显,在对处理器性能较为依赖的L1和L2带宽测试中,开启与关闭测试之间的性能差别不大。
而在内存带宽上,很明显在开启Snoop Filter功能之后内存带宽得到了大范围的提升,提升的幅度接近20%。而内存带宽的提升对于性能的影响是毫无疑问的,所以我们看到在接下来的指令(集)测试中,Snoop Filter开启状态在绝大部分项目中占据领先优势,领先幅度可以达到30%以上。
SiSoftware Sandra是一款可运行在32bit和64bit Windows操作系统上的分析软件,这款软件可以对于系统进行方便、快捷的基准测试,还可以用于查看系统的软件、硬件等信息。从Sandra 2007开始支持SSE4指令集。SiSoftware Sandra所有的基准测试都针对SMP和SMT进行了优化,最高可支持32/64路平台,这也是我们选择这款软件的原因之一。
SiSoftware Sandra Pro Business 2009 | |||
测试对象 | Snoop Filter Enable | Snoop Filter Disable | |
Processor Arithmetic Benchmark | |||
Dhrystone ALU | 97947MIPS | 97925MIPS | |
Dhrystone ALU vs SPEED | 36.82MIPS/MHz | 36.81MIPS/MHz | |
Whetstone iSSE3 | 72459MFLOPS | 70139MFLOPS | |
Dhrystone iSSE3 vs SPEED | 27.24MFLOPS/MHz | 26.37MFLOPS/MHz | |
Processor Multi-Media Benchmark | |||
Multi-Media Int x8 iSSE4.1 | 252.87MPixel/s | 252.04MPixel/s | |
Multi-Media Int x8 iSSE4.1 vs SPEED | 95.07kPixels/s/MHz | 94.75kPixels/s/MHz | |
Multi-Media Float x4 iSSE2 | 168.54MPixel/s | 168.41MPixel/s | |
Multi-Media Float x4 iSSE2 vs SPEED | 63.36kPixels/s/MHz | 63.31kPixels/s/MHz | |
Multi-Media Double x2 iSSE2 | 89.54MPixel/s | 89.44MPixel/s | |
Multi-Media Double x2 iSSE2 vs SPEED | 33.66kPixels/s/MHz | 33.62kPixels/s/MHz | |
Multi-Core Efficiency Benchmark | |||
Inter-Core Bandwidth | 21.00GB/s | 21.25GB/s | |
Inter-Core Bandwidth vs SPEED | 8.08MB/s/MHz | 8.14MB/s/MHz | |
Inter-Core Latency | 89ns | 89ns | |
Inter-Core Latency vs SPEED | 0.03ns/MHz | 0.03ns/MHz | |
Memory Bandwidth Benchmark | |||
Int Buff'd iSSE2 Memory Bandwidth | 4.22GB/s | 4.18GB/s | |
Int Buff'd iSSE2 Memory Bandwidth vs SPEED | 6.48MB/s/MHz | 6.42MB/s/MHz | |
Float Buff'd iSSE2 Memory Bandwidth | 4.16GB/s | 4.18GB/s | |
Float Buff'd iSSE2 Memory Bandwidth vs SPEED | 6.40MB/s/MHz | 6.42MB/s/MHz | |
Memory Latency Benchmark | |||
Memory(Random Access) Latency | 114ns | 113ns | |
Memory(Random Access) Latency vs SPEED | 0.17ns/MHz | 0.17ns/MHz | |
Speed Factor | 100.90 | 99.50 | |
Internal Data Cache Latency | 3clocks | 3clocks | |
L2 On-board Cache Latency | 18clocks | 18clocks | |
Cache and Memory Benchmark | |||
Cache/Memory Bandwidth | 71.76GB/s | 76.03GB/s | |
Cache/Memory Bandwidth vs SPEED | 27.63MB/s/MHz | 29.27MB/s/MHz | |
Speed Factor | 102.50 | 97.70 | |
Internal Data Cache | 421.73GB/s | 422.81GB/s | |
L2 On-board Cache | 120.50GB/s | 140.41GB/s | |
.NET Arithmetic Benchmark | |||
Dhrystone .NET | 27928MIPS | 28282MIPS | |
Dhrystone .NET vs SPEED | 10.50MIPS/MHz | 10.63MIPS/MHz | |
Whetstone .NET | 38915MFLOPS | 45356MFLOPS | |
Whetstone .NET vs SPEED | 14.63MFLOPS/MHz | 15.92MFLOPS/MHz | |
.NET Multi-Media Benchmark | |||
Multi-Media Int x1 .NET | 40.49MPixel/s | 39.99MPixel/s | |
Multi-Media Int x1 .NET vs SPEED | 15.22kPixels/s/MHz | 15.03kPixels/s/MHz | |
Multi-Media Float x1 .NET | 11.39MPixel/s | 11.27MPixel/s | |
Multi-Media Float x1 .NET vs SPEED | 4.28kPixels/s/MHz | 4.24kPixels/s/MHz | |
Multi-Media Double x1 .NET | 20.23MPixel/s | 19.98MPixel/s | |
Multi-Media Double x1 .NET vs SPEED | 7.60kPixels/s/MHz | 7.51kPixels/s/MHz |
在Sisoftware测试中,Snoop Filter的作用似乎没有刚才体现得那么明显。在处理器架构、内存带宽和.NET多媒体等三方面的测试中,Snoop Filter开启状态下有微弱的优势。不过在另外四个项目——处理器多媒体、.NET架构、内存延迟、缓存及内存等项目的测试中,Snoop Filter开启状态的性能还不如关闭状态,性能反而有些下降。
为了运行SPEC CPU 2006测试,我们统一安装了Windows Server 2008 Enterprise x64 Edition SP1操作系统,在主流的x64处理器下,原生64应用要比32位下快。我们还安装了Visual Studio 2005 SP1、Intel C++/Fortran Compiler 10.0.025编译器,对于支持SSE3指令集的处理器,我们使用了QxO编译指令进行了优化。编译时未使用SmartHeap商业优化库。
SPEC测试代表了绝大多CPU密集型的运算,包括编程语言、压缩、人工智能、基因序列搜索、视频压缩及各种力学的计算等,包含了多种科学计算,可以用来衡量系统执行这些任务的快慢。SPEC base测试包括浮点(fp)与整数运算(int)两部分。
整数运算主要包含编译、压缩、人工智能、视频压缩转换、XML处理等,此外,各种日常操作也主要是基于整数操作。SPEC CPU 2006的整数运算包含了400.perlbench PERL编程语言、401.bzip2 压缩、403.gcc C编译器、429.mcf 组合优化、445.gobmk 人工智能:围棋、456.hmmer 基因序列搜索、458.sjeng 人工智能:国际象棋、462.libquantum 物理:量子计算、464.h264ref 视频压缩、471.omnetpp 离散事件仿真、473.astar 寻路算法、483.xalancbmk XML处理共12项。
SPEC CPU测试主要考验处理器性能和缓存-内存子系统性能,经过对比我们发现,在SPECfp项目的测试中,Snoop Filter开启状态下的得分是61.1分,关闭状态下的得分是56.3分,性能差距为8.5%;而在SPECint项目中,Snoop Filter开启的测试的得分为133分,关闭时候的得分为131分,差距微乎其微。因此,我们认为在SPEC CPU 2006这项测试中,Snoop Filter功能的开启与否对于SPECfp项目的影响更大一些。
NetBench 7.03 Ent_dm.tst测试脚本模拟的是企业级文件服务器应用,它不但要求被测服务器的磁盘子系统可以提供足够的吞吐量,还需要其具有较高的IO处理能力,并且需要较为平衡的读取能力和写入能力。
在文件服务器项目的应用测试中,Snoop Filter功能的开启看到了明显的效果。从上面两条曲线的变化来看,在低负载情况下,Snoop Filter功能开启与否对性能帮助不大。但是当客户端数量达到24台以后,随着负载的增加,测试曲线出现了明显的变化。
最终,Snoop Filter功能开启状态下的性能可以达到1800MBps,而Snoop Filter功能关闭状态下的性能只有1600MBps多,性能差距明显。由此看来,随着负载压力的不断增加,Snoop Filter功能的开启可以帮助文件服务器在高负载情况下得到更好的性能。
我们在被测服务器上安装了Microsoft SQL 2005 SP1,按照测试要求建立了数据库。BF在测试之前会在数据库中生成9个表,其中包括4个500万行的表格,每行包括100字节的数据,因此每个表格容量大约是476MB,整个数据库容量为1.86GB。我们用60个客户端模拟1000个用户,在这个数据库中进行查询、添加、删除、修改等操作。
虽然在文件服务器的测试中,Snoop Filter功能表现出了不俗的性能。不过在数据库项目的测试中,Snoop Filter功能似乎又变得可有可无了。事实上,我们测试Snoop Filter功能开启与否对于峰值性能的影响并不是很大,基本上两条曲线的顶点位置都在55000-60000 TPS之间。不过计算平均性能,Snoop Filter功能关闭状态下的表现还要好一些。
Intel 5400芯片组Snoop Filter运行示意图
作为四通道至强处理器平台,Intel 5000X芯片组是Bensley平台中性能最强大的产品,而Snoop Filter功能无疑是5000X芯片组的亮点之一。虽然就Intel目前只声明Snoop Filter功能在四路和多路服务器上能够提升服务器性能,但是从我们实际测试的结果来看,即便是在当前的双路服务器中,Snoop Filter功能还是有用武之地的。
作为一种特别的缓冲器,Snoop Filter中储存了缓存Tag结构。由于使用了MESI协议,为确保多核平台中缓存的一致性,每一颗处理器必须时刻注意另一颗处理器的总线情况。当一颗处理器进行某项操作时,Snoop Filter会将这一信息进行探听,并确定服务器内的所有处理器是否要调整相关操作。从这个角度来说,使用Snoop Filter将有助于减少处理器总线数据堵塞情况的发生。
就我们测试的结果来讲,虽然Snoop Filter功能的开启不可能在每一项测试中都占据优势,但对于服务器性能的提升也起到了有很大的帮助,除了数据库测试之外。而就应用来说,最重要的就是在文件服务器测试中,Snoop Filter功能的提升作用明显,提升幅度在10%以上。所以,如果用户仍在使用5000X或者5400芯片组的产品,不妨尝试在BIOS中开启Snoop Filter功能,获得更好的文件服务器性能。