3

我想知道理论上是否可以在 BIOS 中禁用超线程后启用超线程,反之亦然。事实证明,如果超线程被禁用,它们仍然会在 ACPI 的 MADT 表中显示为禁用的内核。这是 MADT 的示例输出,处理器具有 4 个内核和每个内核 2 个线程,并且禁用了超线程。

CPU 0: APIC_ID=0 ACPI_PROCESSOR_ID=0 ENABLED=1
CPU 1: APIC_ID=2 ACPI_PROCESSOR_ID=1 ENABLED=1
CPU 2: APIC_ID=4 ACPI_PROCESSOR_ID=2 ENABLED=1
CPU 3: APIC_ID=6 ACPI_PROCESSOR_ID=3 ENABLED=1
CPU 4: APIC_ID=255 ACPI_PROCESSOR_ID=4 ENABLED=0
CPU 5: APIC_ID=255 ACPI_PROCESSOR_ID=5 ENABLED=0
CPU 6: APIC_ID=255 ACPI_PROCESSOR_ID=6 ENABLED=0
CPU 7: APIC_ID=255 ACPI_PROCESSOR_ID=7 ENABLED=0

我想知道(a)是否有一个选项可以在运行时启用这些内核(无需重新启动并通过 BIOS)。并且(b)如果未启用超线程/处理器(例如,它是否在本地 APIC 禁用的情况下执行 hlt 或 mwait 指令?),超线程/处理器处于什么(定义明确的)状态。

我在 ACPI 规范(5.2.12.2 处理器本地 APIC 结构)中读到的启用标志如下:

如果为零,则此处理器不可用,并且操作系统支持不会尝试使用它。

但是,如果有人知道,我很想知道禁用的超线程的实际状态是什么。例如,英特尔软件开发人员手册第 3 卷(第 8.4.3 节)中描述的 MP 初始化协议算法是否执行于初始化期间禁用的超线程?

4

1 回答 1

1

(a) 很抱歉,除非您有权访问处理器初始化代码,或者您的 BIOS 供应商碰巧注释掉了几行不同的代码,否则您无法确定 99.99%。内核和线程的数量在冷启动过程结束时被锁定。

(b) 我很确定何时设置了 HT 禁用位。逻辑处理器 1 和辅助 APIC 被禁用。

于 2014-05-11T18:11:03.290 回答