我想知道理论上是否可以在 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 初始化协议算法是否执行于初始化期间禁用的超线程?