不久前,我试用了新的 Win2008 虚拟机,发现了一些严重的问题。
服务器是 Dell T610。16gig,4 核,8 逻辑,2.4ghz Xeon,5600 系列。ESXi 4.1.0 客户机是 2008 64 位,有 2vCPU
我一直在使用 7Zip 对一个 400MB 的文件进行 CPU 性能测试。我们的服务器要求特别需要单线程性能,因此我只用一个线程运行 7Zip。
7zip 在虚拟机上耗时 4 分 50 秒。相比之下,在最近的 2ghz、4 核服务器上,此过程耗时 4 分 00 秒。
显然这里存在一个问题。
于是我尝试在 7Zip.exe 进程上设置进程亲和性。这次压缩只花了 3 分 20 秒。请注意,在物理机上设置亲和性没有区别。(无论开启还是关闭,速度都一样快)在物理机和虚拟机上,当未设置亲和性时,您可以在 taskman 中看到进程在所有核心之间被抛出)
具有讽刺意味的是,在负载很重的机器上,任务会完成得更快,因为它们更有可能保留在同一个 CPU 上。
问题是,为什么 Windows 具有如此松散的处理器亲和性而 Linux 没有呢?
答案1
“因此,对于主要为单线程(或有限线程)的应用程序,有时最好将 CPU 亲和性设置为特定核心或核心子集。这将允许‘Turbo’处理器频率缩放启动并持续(而不是跳转到可能无法扩展甚至可能缩小的各种核心)。”
“到目前为止,还没有操作系统调度程序会考虑单个内核的活动时钟速度(据我所知)。也许这种情况会在 Windows 的未来版本中有所改变,但至少在几年内不太可能发生。”