![多核处理器是否具有用于随机改变在哪个核心执行指令的内部硬件?](https://linux22.com/image/1601215/%E5%A4%9A%E6%A0%B8%E5%A4%84%E7%90%86%E5%99%A8%E6%98%AF%E5%90%A6%E5%85%B7%E6%9C%89%E7%94%A8%E4%BA%8E%E9%9A%8F%E6%9C%BA%E6%94%B9%E5%8F%98%E5%9C%A8%E5%93%AA%E4%B8%AA%E6%A0%B8%E5%BF%83%E6%89%A7%E8%A1%8C%E6%8C%87%E4%BB%A4%E7%9A%84%E5%86%85%E9%83%A8%E7%A1%AC%E4%BB%B6%EF%BC%9F.png)
我的一个朋友说,即使你将进程固定在操作系统中的特定核心上,进程也总是会在核心之间跳转。他说,处理器制造商这样做是为了防止处理器因热点而烧毁(核心是否真的烧毁是另一回事)。
他还说,例如,Windows 任务管理器不正确,因为它无法跟踪处理器内部的操作。因此不可信……他发誓他看到了一些英特尔文档对此进行了解释。(但他找不到)
我试图告诉他这是不合逻辑的,因为这样做会使缓存和管道等无效,但由于也没有文件证明这一点,所以很难证明。
是否有人知道相关文献或者能够做出无懈可击的解释来证明这两种理论?
谢谢!
答案1
我认为处理器中没有刻意进行“随机化”以避免热点或其他问题。
Ring 0 代码可以读取 CPU 寄存器来识别代码在哪个核心上运行,如果代码在错误的核心上运行,则可以放弃其 CPU 时间。至少,一个核心在 BIOS 初始化重置期间始终设置 BSP 引导标志(我们说的是 x86 CPU)。您可以读取该寄存器以确保只在该核心上运行。但几乎肯定还有其他一些可以使用的 ID 机制。
由于操作系统特权内核代码处理进程切换,因此您绝对可以为操作系统提供将进程锁定到特定核心的功能,即使这只意味着放弃 CPU 时间,直到切换落在该核心上。您还可以将所有其他进程设置为避开该核心,以使其保持开放状态以供您想要的进程使用。
因此,无论任务管理器是否执行此操作,理论上您都可以肯定知道哪个进程在哪个核心上运行,并将它们锁定到这些核心上。
那么,英特尔是否有隐藏的硬件来切换内核 ID,让您不知道实际运行的是哪个物理内核?我怀疑。CPU 会报告每个内核的温度,您可以使用锁定到不同内核的单线程进程查看不同内核的温度上升情况。