Отключение и включение Hyperthreads на лету

Мне интересно, теоретически возможно ли включить гиперпотоки после того, как они были отключены в 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), на отключенные гиперпотоки во время инициализации?


person zgerd    schedule 16.04.2014    source источник
comment
Что ж, если BIOS может это сделать, то, конечно же, вы тоже можете это сделать. Однако, скорее всего, это метод, специфичный для материнской платы/чипсета, поэтому он не будет переносимым.   -  person tangrs    schedule 18.04.2014
comment
Я согласен, однако, в зависимости от состояния, в котором BIOS оставляет отключенные ядра, это может быть просто вопрос отправки серии IPI и установки идентификатора APIC для пробуждения ядра. С другой стороны, если ядро ​​​​никогда не было инициализировано должным образом, это будет сложнее сделать, поскольку, как вы указали, это, вероятно, связано с конкретными операциями набора микросхем.   -  person zgerd    schedule 19.04.2014
comment
Никогда не пробовал подобное. Я понятия не имею, в каком состоянии ядра могут «проснуться» и в каком режиме они могут начать работать. ОС должна будет начать управлять ими и отправлять на них потоки, настраивать mto для обработки прерываний и т. д. Вся перспектива кажется для меня быть в категории "очень маловероятно" :(   -  person Martin James    schedule 19.04.2014


Ответы (1)


(a) Извините, но вы не можете с уверенностью 99,99%, если у вас нет доступа к коду инициализации процессора или ваш поставщик BIOS не закомментировал несколько разных строк кода. Количество ядер и потоков фиксируется в конце процесса холодной загрузки.

(b) Я почти уверен, когда установлен бит отключения HT. Логический процессор 1 и вторичный APIC отключены.

person James    schedule 11.05.2014
comment
Я думаю, что вопрос касается взлома i5 в i7 или что-то в этом роде. Я не слышал, чтобы кому-то это удалось. Для начала вам нужно назначить действительные идентификаторы APIC ядрам HT, которые всегда идентифицируются последним битом, поэтому ЦП 4 потребуется идентификатор APIC, равный 1, и так далее. Но я уверен, что есть некоторые функции процессора, которые будут игнорировать такой MADT, даже если вы взломаете его в своем BIOS. - person Fizz; 13.07.2014