为什么 Windows 的处理器亲和性如此宽松

为什么 Windows 的处理器亲和性如此宽松

不久前,我试用了新的 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 的未来版本中有所改变,但至少在几年内不太可能发生。”

https://bitsum.com/pl_when_cpu_affinity_matters.php

相关内容