WebBench是针对服务器作为WebServer时的性能进行测试,我们在被测服务器上安装了IIS组件,以提供测试所需的Web服务。在测试中我们使用了网络实验室中的60台客户端,配置了120个测试引擎,分别使用了WebBench5.0内置的动态CGI以及静态页面脚本对服务器进行了测试。
网络实验室控制台
静态测试是由客户端读取预先放置在服务器WebServer下的Web页面(wbtree),这项测试主要考察的是服务器磁盘系统以及网络连接性能。我们使用了实验室中的56台客户端,配合Static_mt.tst多线程静态脚本测试向被测服务器发送请求。
动态测试偏重于对服务器CPU子系统的性能测试,它对于Web服务器提供了足够的负载。我们将一个C语言编写的CGI源文件Simcigi.c编译为Simcgi.exe,并将其作为动态测试中的CGI脚本。在测试过程中,每台安装了WebBench客户端软件的PC,会在300秒的时间内持续向服务器发送CGI请求,而控制台会纪录并汇总服务器所响应CGI请求的数据。CGI测试的成绩高低,主要取决于服务器处理器子系统性能的优劣。处理器子系统包括CPU、内存以及内存控制器,CPU频率、缓存以及内存容量大小和内存带宽,都会影响该项成绩。
我们采用了评测中心的一台DELLPE2900III服务器,它配置了双路Intel45nmXeonE5430处理器,频率为2.66GHz,并能支持SSE4.1指令集。服务器还使用了Intel5000X芯片组,提供24MB的SnoopFilter缓存,这可以提升高负荷时的内存/处理器性能。为了避免磁盘子系统形成瓶颈,我们使用了8块15000RPM的Cheetah15K.5通过一块PCIex8接口的LSIMegaRAIDSAS8408E来组建了一个RAID0阵列。它可以提供足够的带宽。
***,网络子系统使用的是DELLPE2900III板载的两块BroadcomBCM5708C千兆网卡,并使用了Broadcom的***驱动12.26.02并使用BroadcomBACS3.0组建了一个网卡Team。BCM5708C可谓是Broadcom一个里程碑式的千兆网卡产品,支持达8个队列的RSS接收方缩放队列,可以将网络负载分配到8个处理器核心上并行处理,充分利用多核心处理器并提升网络吞吐量。
两代操作系统携带的IIS(InternetInformationServer)版本不同,2008带的是IIS7.0,而2008R2带的是IIS7.5。2003携带的是IIS6.0。
在结果上,我们发现WindowsServer2008R2/IIS7.5的动态页面性能要比WindowsServer2008/IIS7.0高一点,***达到了5724Rps,而2008是5181,2008R2的峰值大概高了10%左右。静态页面的性能表现因为结果很奇怪还在调试中(可能和驱动有关)。
从原因上来说,笔者觉得IIS的关系不是很大,造成提升的因素应该和NetBench中一样,最主要的是两个方面:系统内核和网络子系统,WindowsServer2003的中断处理只能在***个物理CPU核心上进行,这个核心很快就成为了具有大量IO(因而具有大量中断)的服务器中的瓶颈。而到了WindowsServer2008,中断处理(ISR和DPC)都可以发生在多个CPU核心上。而WindowsServer2008R2对DPC的处理又做了改进。关于内核上的改进可以参阅这里:
至于网络子系统的改进,每一代Windows都会改进其NDIS(NetworkDriverInterfaceSpecification,即网络驱动接口规范),WindowsServer2003是5.2,2008是6.10,而2008R2是6.20。相比NDIS5.x/6.0,WindowsServer2008的NDIS6.1对RSS(接收方扩展)和MSI-X(扩展消息告知中断)的支持更好,并且支持数据包的头和数据独立处理。WindowsServer2008R2的NDIS6.20对RSS作了进一步的改进。不过,我们在2008/2008R2测试下使用的驱动程序都是基于NDIS6.0架构,因此最终结果上来看,两个操作系统的差别不算太大。