即时禁用和启用超线程

时间:2014-04-16 21:08:31

标签: operating-system x86 bios hyperthreading acpi

我想知道在理论上是否可以在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)什么(定义明确或未定义)状态是超线程/处理器,如果没有启用(例如,是否执行hlt或mwait指令禁用本地APIC?)。

我在ACPI规范(5.2.12.2处理器本地APIC结构)中读到的内容如下:

  

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

但是,如果有人知道,我有兴趣了解禁用超线程所处的实际状态。例如,英特尔软件开发人员手册第3卷(第8.4节)中描述的MP初始化协议算法.3)在初始化期间执行禁用的超线程?

1 个答案:

答案 0 :(得分:1)

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

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