我有一个运行 Windows 2003 和 1gb 以太网的四处理器 vmware 实例。我正在比较从本地硬盘驱动器提供完全相同的重 .NET 2.0 内容与从 UNC 驱动器提供它。
如果我使用 WCAT 来加载它,我发现从 UNC 提供服务时事务/秒减少了大约 40%。处理器时间几乎没有从 45% 移动,而 NIC 则保持在 40% 左右。无论哪种方式,我都没有看到任何显着的内存加载。但是,从 UNC 提供服务时,上下文切换/事务增加了一倍以上。路径长度也增加了一倍以上,但我相信这只是上下文切换效果的一种表达。
总而言之,瓶颈似乎是在等待来自 UNC 共享的内容时切换处理器。我的经验是规范吗?我可以尝试一些缓解措施吗?
我根据http://technet.microsoft.com/en-us/library/dd296694(WS.10).aspx稍微玩弄了 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\MaxCmds ,但没有明显的效果。我有点怀疑我的问题是缺少连接,而只是在等待数据时从线程切换到线程的行为。
我们发现 VMWare 虚拟机大幅降低了网络,不是吞吐量,而是延迟,大约 40%。我们的具体案例是 Active Directory 流量。但是,也许使用物理不是您可以做的。
大约一年后,我仍然记得这个。解决方案是在 VM 实例上从 4 个处理器减少到 2 个。这是违反直觉的,但是向 VM 实例添加处理器会增加 VM 主机上的争用。主机只会在有一定数量的可用切片或类似的切片时分配处理器时间,并且当 4 个虚拟处理器都在主机处理器上寻找时间时,它们最终会相互阻塞而不是处理。削减到单个处理器会导致硬瓶颈,但 2 个处理器是我们硬件上的最佳选择。