X86 如何在Intel ring和mesh体系结构上选择引导处理器(BSP)

X86 如何在Intel ring和mesh体系结构上选择引导处理器(BSP),x86,intel,cpu-architecture,boot,multicore,X86,Intel,Cpu Architecture,Boot,Multicore,提到仲裁ID用于确定哪个处理器首先发出无操作周期,我在多个来源和《英特尔手册》中看到了这一点。参考MP初始化序列的英特尔手册仅在有“系统总线”时,以及在此之前最初有“APIC总线”时,才对奔腾4进行了说明。我的印象是,仲裁ID仅在多个CPU共享同一总线的架构中才需要。但是现在,在环总线体系结构中,仲裁是通过检测环总线上的空插槽并将事务放在其上来完成的,并且它在每个周期一站移动,这意味着不再需要仲裁 有趣的是,第2.13.2节是一篇关于英特尔ME和PCH的文档的一部分,因此它显然是在谈论Nehal

提到仲裁ID用于确定哪个处理器首先发出无操作周期,我在多个来源和《英特尔手册》中看到了这一点。参考MP初始化序列的英特尔手册仅在有“系统总线”时,以及在此之前最初有“APIC总线”时,才对奔腾4进行了说明。我的印象是,仲裁ID仅在多个CPU共享同一总线的架构中才需要。但是现在,在环总线体系结构中,仲裁是通过检测环总线上的空插槽并将事务放在其上来完成的,并且它在每个周期一站移动,这意味着不再需要仲裁

有趣的是,第2.13.2节是一篇关于英特尔ME和PCH的文档的一部分,因此它显然是在谈论Nehalem和最新版本,但要说使用了APIC ArbID,也许它实际上只是在谈论Nehalem或Westmile


所以我问,如何在环形和网状结构上选择BSP?我的想法是,它可以使用缓存作为RAM,如果缓存一致性确实在无填充模式下工作,那么它们可以竞争互斥,我假设它只是硬连线,其中一个核心是BSP。我认为,在您向其他内核发送IPI之前,它们甚至不会通电,而且它们肯定不会运行试图在缓存中使用互斥来解决这个问题的代码。其他内核可能会处于暂停状态,等待中断

(但可能是像C7之类的深度睡眠C状态,与实际的HALT指令不同,因此如果操作系统从未唤醒某些内核,将唤醒的内核置于睡眠状态可以让整个软件包进入深度睡眠状态。)


对于多插座系统,可能一个插座在某种程度上是特殊的。

我认为BSP的硬接线不起作用。我的理解是,我们甚至不知道哪一个物理内核将正常工作,直到制造了芯片(并将其作为产品销售)。否则,硬接线的磁芯可能是有故障的。因此,需要一种启动时机制来选择一个(正常工作的)逻辑核作为BSP。我也不明白这个问题。在任何时间点,环或网格上都可能有许多事务。我不知道为什么@LewisKelsey认为不需要仲裁ID。很好。我看了Supermicro X8DTN的设计,它是一个双插座主板。第30页和第31页所示的最佳内存填充表表明,两个套接字中的任何一个都可以填充,或者两者都可以填充。因此,是的,我认为套接字之间需要进行一些协商(如果有多个)。@LewisKelsey让我们非常仔细地阅读第3卷第8.4.3节如何描述BSP选择过程。首先,为每个处理器分配一个唯一的APIC ID(每个逻辑核都有一个本地APIC)。其次,根据APIC ID(可以等于APIC ID)为每个逻辑处理器分配仲裁优先级。第三,每个处理器执行内置的自检。第四,在现代英特尔处理器上,每个逻辑处理器在系统总线上发出一个NOP特殊周期。这意味着什么?……特殊周期是一种由系统代理中的Ubox单元处理的事务类型,我将在稍后介绍。在现代英特尔处理器中,系统总线基本上是QPI互连。所以把它放在一起,这意味着每个逻辑核向Ubox发出一个特殊的循环请求,并且每个这样的请求都标记有逻辑核的仲裁优先级。Ubox接收所有这些请求(来自各个套接字的内部内核)。每个Ubox选择具有最高优先级的请求,然后自己为QPI总线主锁进行仲裁…@LewisKelsey英特尔uncore手册中讨论了Ubox。Ubox上的LIKWID文档实际上来自手册。