我正在调整一些服务器代码以获得最佳性能,但我得到了一些奇怪的结果。服务器在虚拟机中的运行似乎比在本地运行时更快。两种设置都使用相同的硬件。
服务器是为 Linux 编写的,测试客户端是 100% 标准 POSIX。这两个应用程序都是用 C 编写的。
设置 1:(~300k 请求/秒)
- OSX 10.7.4 主机
- 在 VirtualBox 中虚拟化的 Ubuntu Linux 12.04 服务器
- VirtualBox 已设置为使用高达 100% 的主机资源
- VirtualBox处于桥接网络模式,Ubuntu在网络上获得自己的IP
- 测试在 OSX 上运行的客户端程序
设置 2:(~100k 请求/秒)
- Ubuntu Linux 12.04 服务器主机操作系统
- 测试器和服务器本地运行,通过 localhost 连接
测试器通过产生 256 个线程来工作,这些线程都独立地连接到服务器并发送命令。服务器在管道中处理请求,只产生与可用内核数相等的线程数。
以下是我到目前为止提出的可能性:
- OSX 调度程序在处理来自测试程序的 256 个线程时效率更高
- Virtualbox的网络接口比linux的loopback接口效率更高
- 虚拟化服务器允许调度程序更有效地在测试人员和服务器之间分配时间
我需要弄清楚是什么导致了速度变慢,以及我能做些什么来解决这个问题。
编辑以获取更多信息:
- 我无权访问任何其他计算机来运行测试仪
- 服务器类似于memcached,它不访问磁盘
- 4 核 i7 - 8GB RAM(对于测试仪和服务器来说足够多的 RAM(即使在 VM 中))