为什么我的电脑更喜欢偶数核心?

5Di*_*tor 1 windows x86 scheduler cpu-architecture hyperthreading

我的电脑配备了启用虚拟化的第 10 代 Core i7 vPRO。8核+8虚拟核。(i7-10875H,彗星湖)

每个物理核心都分成几对,因此核心 1 托管虚拟核心 0 和 1,核心 2 托管虚拟核心 2 和 3。我注意到在任务管理器中,每个核心对的第一项似乎是首选核心,从使用率较高来看。我确实为某些繁重的程序手动设置了一些亲和力,但我总是将它们设置为 4 组,从 0-3、4-7、8-11、12-15,并且永远不会与不同的逻辑处理器不匹配。

我想知道为什么会发生这种行为 - 偶数核心是否等于物理核心,这可能会稍微快一些?如果是这样,如果我运行的程序没有高线程数,我会在没有虚拟化的情况下获得稍微更好的时钟速度吗?

在此输入图像描述 在此输入图像描述

Bre*_*dan 5

一般来说(对于“调度器理论”):

  • 如果您关心性能,请尽可能将任务分散到物理核心上。这可以防止出现“两个任务运行速度变慢,因为它们共享一个物理核心,而整个物理核心处于空闲状态”的情况。

  • 如果您关心功耗而不是性能,请尽可能让任务使用同一物理内核中的逻辑处理器。这可以让您将整个核心置于非常节能的“不执行任何操作”状态。

  • 如果您关心安全性(而不是性能或功耗),请根本不要让不相关的任务使用同一物理核心中的逻辑处理器(因为信息,例如当前正在使用的指令类型,可能会从同一物理核心中的一个逻辑处理器到另一个逻辑进程)。请注意,相关任务最好使用同一物理核心中的逻辑进程(例如,属于彼此信任的同一进程的 2 个线程,但属于彼此不信任的不同进程的线程则不然) 。

当然,一个好的操作系统会知道每个任务的偏好(如果每个任务关心性能或功耗或安全性),并且会做出明智的决策来处理具有不同偏好的任务的混合。遗憾的是,没有好的操作系统 - 大多数操作系统和 API 都是在 20 世纪 90 年代或更早设计的(当时 SMP 刚刚启动,所有 CPU 都是相同的)并且缺乏做出明智决策所需的任务信息;因此他们认为性能是对所有任务唯一重要的事情,从而导致“任务尽可能分布在物理核心上,即使它并不理想”您所看到的行为。