如果单个线程进程繁忙且使用100%的单核,则看起来Windows正在核心之间切换此进程,因为在任务管理器核心概述中,所有核心都是相同的。
为什么Windows会这样做?这不是破坏L1 / L2缓存吗?
答案 0 :(得分:17)
将流程固定到一个核心是有好处的,主要是您已经提到过的缓存。
还有一些缺点 - 加热不均匀,会产生机械应力,不会改善硅芯片的预期寿命。
为了避免这种情况,操作系统倾向于使所有核心保持相同的利用率。当只有一个活动线程时,必须移动它并使缓存无效。只要这种情况很少发生(在CPU时间内),迁移期间额外缓存未命中的影响可以忽略不计。
例如,"Energy and thermal tradeoffs in hardware-based load balancing for clustered multi-core architectures implementing power gating"的摘要明确将此列为调度算法的设计目标(强调我的):
在这项工作中,提出了一种针对这些集群多核架构的负载平衡技术,它既能提供低能量开销,又能在整个芯片上实现平稳的温度分布,从而均匀地提高处理器的可靠性强调核心。
在整个芯片中散布散热对于Turbo Boost等技术也至关重要,在这些技术中,内核暂时以不可持续的长期速率运行。通过定期将负载移动到不同的核心,即使瞬时功率没有,平均散热仍然是可持续的。
答案 1 :(得分:1)
您的流程可能是唯一一个从事大量工作的流程,但并不是唯一正在运行的流程。还有许多其他流程需要偶尔运行。当您的流程被逐出并最终重新安排时,之前运行的核心可能无法使用。最好立即在一个免费核心上运行等待进程,而不是等待以前的核心可用(并且无论如何其数据可能会被另一个线程从缓存中撞出)。
此外,现代CPU允许程序包中的所有核心共享高级缓存。请参阅此Intel Core i5 spec sheet中的“智能缓存”功能。您仍然会丢失核心交换机上的低级缓存,但这些缓存很小,如果您运行的不仅仅是一个小的紧密循环,那么它们可能会有点流失。