为什么增加内存能够让性能很差的计算机摆脱性能困境呢?因为这招一般都管用。当然,能提升多少性能谁都说不准。例如,您希望将某人的台式机的内存从 16MB 升级到 32MB,然后精确地告诉他性能提升了几个百分点。这是不可能的。将台式机的内存从 16MB 升级到 32MB 通常能够显著改善性能。这个问题很简单,没有必要进行解释。
尽管升级台式机内存能够明显改善性能,但升级服务器的内存有时并不一定能得到相同的效果。我们使用服务器的方式与台式机不同。所以,为服务器添加更多的内存有时并不能明显改善性能。由于升级得到的性能效果不明显,所以应该仔细考虑和计划内存的升级。换句话说,在升级内存之前,管理员应该知道希望通过升级改善哪方面的性能。
幸运的是,Lotus 的一些员工正在尝试解决该问题。他们仔细观察了当内存从 512MB 增加到 1 GB 时 Domino 服务器的性能改进。尽管这些测试结果不能保证所有升级都能得到这样的性能改进,但它们确实证明了更多内存是有帮助的。这组人员的测试以及测试结果就是本文的重点。
不使用常规的机器我们决定不在运行 Windows NT 的大型 Pentium 机器上进行测试。相反,我们选择在没有那么流行并且使用其他操作系统的机器上进行测试。原因很简单,我们希望模拟客户环境:
- 计算机:在 SP 机架上的 IBM Thin3 Node,使用一个 120MHz PowerPC 处理器
- 内存:第一组测试为 512MB,第二组测试为 1GB
- 网络:使用 TCP/IP 的 Ethernet
- 操作系统:IBM AIX version 4.20
我们使用这个硬件和操作系统配置安装 Domino Release 4.53。尽管我们可以调整各种 NOTES.INI 变量来改进性能,但是我们决定使用 "vanilla" 环境,并且仅调整以下设置(在所有测试和内存配置中保持不变):
- NOTES_SHARED_DPOOLSIZE =250,000,000(改变该设置以模拟客户环境)。
- SERVER_MAX_CONCURRENT_TRANS = 30(改变该设置以模拟客户环境)。
- NSF_BUFFER_POOLSIZE = 160,000,000(我们使用该设置作为内存控制机制。因此,增加内存时获得的性能提升源于物理内存的改变,而非其他东西)。
注意:我们并不推荐使用以上的 NOTES.INI 设置提升性能。要更多地了解服务器性能调优,要获得其他关于性能的信息
模拟负载执行 Domino 服务器性能测试依赖于模拟真实用户负载的能力。由于很难聚集几百位用户,所以我们使用了各种来自特别设计的 Domino 数据库的测试脚本,以模拟这些用户。该数据库中的脚步帮助模拟 3 种类型的用户:
- 随机用户 (75%):较少使用电子邮件。全天定期地发送主要基于文本的消息。
- 活跃用户 (15%):全天定期地发送电子邮件,偶尔带有附件。有时执行组安排。
- 高强度用户 (10%):大量使用电子邮件。大部分消息都带有附件,并且经常为其他用户执行组安排。
根据这个比例的混合用户,我们按照内存或用户的数量划分测试:
- 测试 1:512MB 内存,350 个用户
- 测试 2:512MB 内存,500 个用户
- 测试 3:1GB 内存,350 个用户
- 测试 4:1GB 内存,500 个用户
在模拟测试期间,我们通过以下工具收集统计数据信息:
- Performance Toolbox for AIX (PTX):用于监控和调优系统性能的综合性工具。这个工具非常灵活,它能够记录超过 200 条 Domino 和 AIX 级别的统计数据。简而言之,它轮询用户的服务器,确定时间间隔并收集指定的统计数据(参考 IBM Web site 更多地了解 PTX)。
- IPTrace:IPTrace 内建在 AIX 操作系统中,它获取负载生成的 LAN 活动的所有包的详细描述。这个自带的程序处理信息,并且提取包含有意义的 Domino Remote Procedure Calls (RPC) 的 IP 流量。
然后,我们将这些工具收集的数据输入到 IBM DB2 数据库做进一步分析。
查看图表我们已经了解硬件、软件和测试方法的细节,现在开始了解最重要的部分 —— 测试结果。下面的图表反映了负载分别为 350 和 500 位用户时增加内存的好处。每组图表前面都有简要的描述;但我们相信图表显示的结果会证明它们的真实性。
事务测试第一个测试度量每分钟在服务器和客户机之间发生的 Domino RPC 的数量。一开始我们就看到了添加更多内存带来的正面性能影响。
图 1. 每分钟的事务数量输入和输出测试接下来的 3 个测试度量更多内存对磁盘 I/O 的影响。第一个测试 “每秒磁盘 I/O 操作” 显示了当内存从 512MB 增加到 1GB 时,性能得到了明显的提升。另外两个测试 “用户为 350 时每秒 I/O 字节数” 和 “用户为 500 时每秒 I/O 字节数” 帮助证实第一次测试的结果 —— 更多的内存能够减少从硬盘获取数据的次数,这意味着更佳的磁盘 I/O 性能。此外,在最后两个图表中,“total read” 实现了很大的性能提升。但 “Total written” 的性能提升很少。为什么出现这种差距?答案很简单。一部分磁盘数据被存储在内存中。因此,请求存储在内存中的数据的读事件不会访问硬盘。不过,磁盘写事件通常会访问磁盘。
图 2. 每秒磁盘 I/O 操作图 3. 用户为 350 时每秒 I/O 字节数图 4. 用户为 500 时每秒 I/O 字节数CPU 性能测试在上面的测试中,我们看到磁盘 I/O 操作得到了巨大的改进。不过,增加内存对 CPU 性能的正面影响没有这么大。接下来的两个测试表明,即使是 CPU 密集型操作也能通过增加内存获得一些性能提升。“系统调用” 测试度量每秒执行的系统服务调用;“运行队列长度” 测试计算等待 CPU 的线程数。
图 5. 内存和用户数量对系统调用的影响图 6. 内存和用户数量对运行队列长度的影响邮件数据库测试最后的测试度量 3 种数据库操作所需的时间:
- Open Collection:打开数据库的操作
- Read Entries:当用户在 Notes 客户端视图中向上或向下查看邮件条目描述时,将发生该事件
- Find by Key:该事件是在分类文档列表上执行的名称查找的一部分
这 3 个图表演示了邮件数据库中的特定用户活动。在这些测试中,增加内存能够加快事件的执行速度。与前两个测试类似,总体性能影响不如 I/O 测试明显。
图 7. Open Collection 图表图 8. Read Entries 图表图 9. Find by Key 图表结束语这些图表表明,内存越多越好。但是,Domino 内存使用的测试结果并不具有普遍性。有许多变量能够直接影响到这些测试:
- 服务器的硬件配置
- 服务器的软件配置
- 操作系统的配置
- 数据库的大小
- 数据库的内存
- 不同的网络变量,比如传输协议、带宽和流量
尽管这些测试受到不同变量的影响,最终结果都是为了回答一个简单但重要的问题 —— 更多的内存会有帮助吗?虽然某些测试的结果比另一些测试更显著,但它们对该问题的回答都是一样的 —— 更多的内存是有帮助的。
不过,关于更多内存的问题并不是一个理论问题。解决这个问题具有实际意义。在用户处于增长临界点时(350 至 500 位用户),管理员必须决定是增加当前服务器的资源,还是购买新的服务器。了解增加内存是否能够提升服务器性能,这将直接影响到您的购买决策。在这些测试中,最终的结果确实影响到客户的决策 —— 他们决定安装更多的内存,延长当前硬件的使用时间。 |