这个问题向我所知道的英特尔专家提出。物理 CPU 上的两个线程是否平等对待?
众所周知,英特尔 CPU 上的超线程是一个系统,其中每个物理内核都作为 2 个虚拟内核呈现给操作系统。这 2 个虚拟内核使处理器能够在操作系统未知的事件(页面错误、其他 CPU 内部事件)上在 2 个执行单元(线程@虚拟内核)之间进行上下文切换,这些事件通常会使 CPU 浪费等待的周期其他 IO 事件。
默认情况下,操作系统不需要考虑超线程。所有内核最终都会完成工作,唯一的区别是现在并非所有可见/虚拟内核都可以以相同的速度处理。为同一物理内核 (VCPU0+1 -> CPU 0) 上的 2 个线程调度的工作将不如在 2 个不同内核 (VCPU0+2 -> CPU 0 + 1) 上调度的工作快。
根据我的研究,“超线程”感知操作系统将尝试在每个物理内核上安排工作,然后再将“虚拟内核”上的调度加倍。我通常认为这是“偶数”VCPU 首先被调度(在 1+3 之前填充 VCPU 0+2)。“偶数”和“奇数”线程是否相等?(实际上没有“超线程”虚拟 CPU)。
换句话说,是否没有用于物理 CPU 的主要/次要“线程”?如果我只在 VCPU 1 上安排工作,它的表现是否与我只是在 VCPU 0 上安排的一样?假设,如果在两个线程上都安排了相同的工作,那么两个线程完成所需的时间大约是原来的两倍吗?