Мне интересно, теоретически возможно ли включить гиперпотоки после того, как они были отключены в BIOS, и наоборот. Как оказалось, даже если гиперпотоки отключены, они все равно отображаются в таблицах MADT ACPI как отключенные ядра. Это пример выходных данных 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
Мне интересно, есть ли (а) возможность включить эти ядра во время выполнения (без перезагрузки и прохождения через BIOS). И (b) в каком состоянии (хорошо определенном или нет) находится гиперпоток/процессор, если он не включен (т. е. выполняет ли он инструкции hlt или mwait с отключенным локальным APIC, например?).
То, что я прочитал в спецификации ACPI (5.2.12.2 Локальная структура APIC процессора), для включенного флага следующее:
Если ноль, этот процессор непригоден для использования, и служба поддержки операционной системы не будет пытаться его использовать.
Однако, если кто-то знает, мне интересно узнать, в каком фактическом состоянии находится отключенный гиперпоток. Например, выполнялся ли алгоритм протокола инициализации MP, описанный в Руководстве Intel для разработчиков программного обеспечения, том 3 (раздел 8.4.3), на отключенные гиперпотоки во время инициализации?