3. 综合测试:Volanomark
volanomark是一个纯java的benchmark,专门用于测试系统调度器和线程环境的综合性能[6],它建立一个模拟Client/Server方式的Java聊天室,通过获取每秒平均发送的消息数来评测宿主机综合性能(数值越大性能越好)。Volanomark测试与Java虚拟机平台相关,本文使用Sun Java SDK 1.4.2作为测试用Java平台,Volanomark版本2.5.0.9。
三、 测试结果
测试计划中将内核分为 2.4.26、2.6.6/ 支持内核抢占和 2.6.6/ 不支持内核抢占三类;通过配置内核以及 NF420R 的 BIOS 实现三类 SMP 规模:单处理机 (UP)、4CPU 的 SMP(SMP4)和打开超线程支持的虚拟 8CPU SMP(SMP8*)。内核配置和 SMP 规模的每一种组合都针对 LinuxThreads 和 NPTL 使用 lat_thread、lat_thread_ctx 和 volanomark 获取一组数据。由于 NPTL 无法在 2.4.x 内核上使用,该项数据空缺。

四、 结果分析
1. LinuxThreads vs NPTL:线程创建/销毁开销
使用 2.6.6/preemptible 内核配置下 UP 和 SMP4 的测试数据获得下图:

在线程创建/销毁开销方面,NPTL 的改进相当明显(降低约 600%)。实际上,NPTL 不再像 LinuxThreads 那样需要使用用户级的管理线程来维护线程的创建和销毁 [9],因此,很容易理解它在这方面的开销能够大幅度降低。
同时,由图可见,单 CPU 下创建线程总是比多 CPU 下迅速。
2. LinuxThreads vs NPTL:线程切换开销
同样使用 2.6.6/preemptible 内核配置下 UP 和 SMP4 的数据:

随着 lat_thread_ctx 的参与线程增多,不管是哪个线程库,单处理机条件下的线程切换开销都陡峭上升,而 SMP 条件下则上升比较平缓。在这方面,LinuxThreads 和 NPTL 表现基本相同。
3. 内核影响




从上面四张图中我们可以得出两点结论:
1、"内核可抢占" 是 Linux 对实时应用提供更好支持的有力保障,但对线程性能影响很小,甚至有一点损失,毕竟抢占锁的开销不可忽略;
2、升级内核并不会对 LinuxThreads 线程库性能带来多少变化,因此,对于服务器系统而言,不能指望仅仅编译使用新内核就能提高性能。

