多核/ NUMA上的CPUID

nix*_*gle 5 x86 osdev low-level cpuid

我正在为我的爱好操作系统研究CPU检测和一般环境检测代码.有没有需要多次调用CPUID的情况?也就是说,如果系统有多个内核,操作系统是否需要在每个内核上调用CPUID?NUMA也是如此.

无论是AMD英特尔 CPUID手册都对这个不清楚.在osdev wiki上有一篇文章提到调用CPUID称为检测CPU拓扑,但是我的阅读并不清楚CPUID需要调用的时间和次数.

Mys*_*ial 3

由于已经快一周了,没有人能够回答这个问题(可能是因为假期),所以我无论如何都会尝试回答这个问题。

我认为答案是肯定的。您可能需要调用CPUID每个核心。原因之一是当今并非所有(甚至 x86)系统都是同类的。

例如,我在超频论坛上读到(我找不到链接),可以在某些双插槽服务器主板上混合使用两种不同的处理器型号。该人有一个双插槽 1366 系统,带有两个不同速度的处理器。(以及不同的型号)

因此,在这种情况下,调用CPUID将取决于线程所在的处理器 - 因此您需要在每个处理器上调用一次才能获取所有信息。

在我的一台服务器主板的手册中,还指出允许您混合使用不同型号的处理器(有一定的限制)。当然,可以混合同一处理器型号的两种不同步进。


仅这个原因(异构拓扑)就已经是需要调用CPUID每个核心的原因。