
Увеличивает ли включение tsx-инструкций Intel хешрейт при майнинге?
Для устранения уязвимостей микрокода процессоров Intel периодически выпускаются патчи, в которых программно отключаются скомпрометированные инструкции. Так как процессор не имеет встроенной перезаписываемой памяти, обновленная ревизия микрокода подгружается всякий раз после включения компьютера. Эта процедура обычно производится двумя способами:
- внесение обновленного микрокода CPU в BIOS материнской платы;
- внесение корректирующих изменений в служебные файлы/ядро операционной системы.
Обычно патчи отключают те или иные функции процессора (блокируют выполнение инструкций). Из-за этого немного падает производительность, программы, использовавшие заблокированные команды, начинают работать медленнее. Так как блоки, отвечающие за выполнение «плохих команд», аппаратно не отключаются, желающие могут их снова включить.
Одним из наборов инструкций, которые компания Intel программно отключила в своих процессорах (CPU 4-9-го поколений), являются команды TSX (Transactional Synchronization Extensions). Если использовать программы, в которых используются этот набор инструкций, то теоретически можно получить прирост хешрейта при майнинге. уменьшить время обработки данных в AI-приложениях, увеличить FPS в играх и т. д.
Чтобы заставить работать в полную силу некоторые процессоры Intel 4-9-го поколений (Haswell и Crystal Well, Skylake, KabyLake, CoffeeLake, Whiskey Lake) нужно откатить microcode update Intel в BIOS материнской платы и отключить обновление операционной системы, отвечающее за блокировку нужного набора процессорных команд. В новых версиях ОС такое обновление может быть частью программного кода ядра, в таком случае нужно откатываться на более старую версию или пересобирать его под свои нужды.
Активация TSX-инструкций процессоров Intel в ubuntu
Для начала нужно убедиться, что процессор, установленный на компьютере имеет блоки Transactional Synchronization Extensions (TSX). В Linux это можно сделать, выполнив команду:
lscpu
Искомая информация находится в разделе, описывающем уязвимости CPU. Если процессор в текущей конфигурации не имеет проблем с tsx-командами, то lscpu выдаст информацию:
...Tsx async abort: Not affected
Такой ответ можно получить в последних версиях Linux при проверке процессоров четвертого поколения Haswell, например, Intel Xeon E3-1265L V3 2.5GHz, Core I5-4590, i5-4670, i5-4570R и т. д., а также для процессоров 6-8-го поколений, например, Core i5-7400, i3-8100 и других:

Изначально процессоры уровня Intel Xeon E3 v3, Haswell Core I5-45xx, а также более новые CPU умели выполнять TSX-команды (точную тинформацию о конкретной модели процессора можно узнать на официальном сайте Intel):

Активировать набор инструкций tsx в современных операционных системах на таких микропроцесорах будет довольно сложно.
Ситуация с производительными процессорами Intel шестого-девятого поколений немного иная. В них имеется поддержка набора tsx-инструкций, хотя они обычно отключены на уровне BIOS и/или в операционной системе.
При использовании ревизий микрокода процессора с частичной блокировкой, можно запускать TSX-команды после соответствующего изменения параметров работы ядра системы Linux. Например, процессоры 6-7 поколений Skylake/Kaby Lake с ревизией микрокода 0xe4 / 0xea могут работать с tsx-командами, а с микрокодом 0xf0 не могут, так как в них произведена полная блокировка TSX:
Дата релиза | Ревизия (hex) | Сигнатура | Краткое описание изменений |
|---|---|---|---|
Февраль 2021 | 0xe4 / 0xea | 06-9E-0A (U0, i7-7700) 06-8E-09 (H0) | Блокировка TSX (RTM/HLE) по умолчанию (CVE-2019-11135). Фиксы для JTAG/BMC-issues. В Linux: 3.20210216.1. |
Июнь 2021 | 0xf0 | 06-9E-09/0A (B0/U0) | Полная блокировка TSX в Skylake/Kaby Lake. Смягчение Retbleed (CVE-2022-29900). |
Например, процессор Intel Core I7-7700 3.60GHz в ОС чгигтег 24.04 с последним микрокодом Intel (ревизия f0) по команде lscpu выдает информацию о лечении уязвимости путем отключения tsx-команд:
...Tsx async abort: Mitigation; TSX disabled

Если откатить версию микрокода Intel до любой предыдущей версии, набор инструкций TSX становится активным, команда lscpu сообщает, что tsx-команды активны, ОС уязвима:
Tsx async abort: Vulnerable

Отключить загрузку обновленного микрокода Intel можно kb,j добавив в конфигурацию ядра Linux параметр dis_ucode_ldr, либо откатить до старой версии/удалить пакет intel-microcode.
Инженерные версии процессоров Intel по умолчанию не получают обновлений микрокода на уровне ОС, обычно работают на материнских платах со старыми версиями BIOS, в которых инструкции tsx не заблокированы. Например, на компьютере автора данной статьи с инженерным процессором Intel I7 6400T QHQG не нужно откатывать микрокод, CPU-инструкции Tsx изначально активны и не отключаются даже после полного обновления системы.
На подобных компьютерах можно активировать поддержку команд tsx, используя соответствующую конфигурацию ядра системы.
Для этого редактируется файл /etc/default/grub:
sudo nano /etc/default/grub
в строку GRUB_CMDLINE_LINUX вписываются команды:
tsx=on mds=off tsx_async_abort=off
Для процессоров с отключенной поддержкой tsx (lscpu выдает Tsx async abort: Mitigation; TSX disabled) можно отключить загрузку обновленного микрокода Intel, добавив в конфигурацию ядра параметр dis_ucode_ldr:
tsx=on mds=off tsx_async_abort=off dis_ucode_ldr

Затем сохраняем сделанные изменения (Ctrl+O, Enter, Ctrl+X), обновляем grub командой
sudo update-grub
и перезагружаем компьютер.
Теперь lscpu показывет, что компьютер стал уязвим к атакам: Tsx async abort: Vulnerable.
Проверка версии микрокода процессора показывает, что используется ревизия, в которой Tsx-инструкции не отключены.
Команды для проверки загруженной версии микрокода Intel:
sudo dmesg | grep microcode
cat /proc/cpuinfo | grep microcode | sort | uniq
Процессор Intel I7-7700, работающий на Intel Microcode. Rev. 0X48 с разблокированными командами tsx в ОС xubuntu 24.04 (в ней по умолчанию используется ревизия 0xf, блокирующая выполнение инструкций tsx):

Дает ли прирост производительности активация CPU-инструкций TSX?
Чтобы получить прибавку в производительности процессора за счет активации аппаратной поддержки tsx-команд, нужно использовать программы, которые их используют. В большинстве случаев они не используются, поэтому эффект от их активации минимален. Если для включения поддержки tsx-команд производился откат к старой версии микрокода процессора, его производительность в ряде случаев может даже упасть.
Например, производительность процессора Intel I7-7700, измеренная в программе Geekbench (ОС xubuntu 24.04) без активации tsx-команд (с микрокодом 0xf) намного выше, чем при их включении за счет даунгрейда микрокода до ревизии 0X48.
Результат тестирования производительности процессора Intel I7-7700 в программе Geekbench с понижением микрокода CPU до версии 0X48:

Результат тестирования производительности процессора Intel I7-7700 в программе Geekbench без модификаций (используется самый новый микрокод 0xf):

Результаты понижения версии микрокода процессора печальны… Вероятно, чтобы в полной мере использовать набор команд tsx, не теряя преимуществ от последних модификаций микрокода процессора, нужно использовать его пропатченные версии, в которых отключается только tsx-блокировка…
Для проверки влияния активации инструкций tsx за счет понижения версии микрокода CPU при майнинге была произведена сборка майнеров cpuminer-opt-jayddee и xmrig из исходного кода с включенным флагом mrtm:

и
COMPILE_FLAGS "-Ofast -mrtm -mavx2 -msse4.2 -fno-tree-vectorize")
Майнинг на процессоре Intel I7-7700 (микрокод 0X48) на алгоритме yespowersugar в программе cpuminer-opt-jayddee 25.6 с включенными инструкциями tsx, хешрейт около 1 KH/s (четыре потока, xubuntu 24.04):

При майнинге с микрокодом 0xf (самый новый) хешрейт увеличился на 1-3% (возможно, это статистическая погрешность).
Майнинг на процессоре Intel I7-7700 (микрокод 0X48) на алгоритме ghostrider в программе xmrig-mo 6.24.0 с включенными инструкциями tsx, на протяжении 5-6 минут средний хешрейт 0.35-0.4 KH/s (четыре потока, xubuntu 24.04):

С последним микрокодом Intel без tsx хешрейт примерно тот же.
Майнинг на процессоре Intel I7-7700 (микрокод 0X48) на алгоритме randomx в программе xmrig-mo 6.24.0 с включенными инструкциями tsx, хешрейт около 2.8 KH/s (четыре потока, xubuntu 24.04):

Без инструкций tsx с микрокодом CPU 0x8 хешрейт при майнинге на randomx такой же.
Майнинг на алгоритме verushash на процессоре Intel I7-7700 с отключенными и включенными инструкциями tsx, хешрейт одинаков, около 5.8-5.9 KH/s (четыре потока, xubuntu 24.04):

Майнинг на процессоре Intel I7-7700 (микрокод 0X48) на алгоритме scryptn2 в программе cpuminer-opt-jayddee 25.6 с включенными инструкциями tsx, хешрейт около 25 H/s (четыре потока, xubuntu 24.04):

С последним микрокодом CPU Intel и отключенными TSX-Mitigations хешрейт остался прежним.
Майнинг на процессоре Intel I7-7700 (микрокод 0X48) на алгоритме argon2d16000 в программе cpuminer-opt-kudaraidee 1.2.4 в ОС с включенными инструкциями tsx, хешрейт 0.6-0.7 KH/s (четыре потока, xubuntu 24.04):

С последним микрокодом и включенными TSX-Mitigations хешрейт больше на примерно 5%:

Майнинг на процессоре Intel I7-7700 на алгоритме mike в программе srbminer-multi 2.9.8 в системе с включенными (микрокод 0X48) и отключенными инструкциями tsx обеспечивает одинаковый хешрейт около 0.45-0.46 KH/s (четыре потока, xubuntu 24.04):

Как видно из тестов, никакого роста производительности за счет включения инструкций tsx не произошло. Возможно, помимо перехода на старую версию микрокода процессора, а также использования подходящей версии BIOS, требуется загрузка другой версии ядра Linux или его модификация.
Заключение
Проверка производительности компьютера с включенными tsx-инструкциями показывает, что их включение не дает никакого выигрыша при майнинге (по крайней мере, на тестируемых алгоритмах). Результаты теста Geekbench вообще демонстрируют значительное падение быстродействия из-за снижения используемой версии микрокода процессора.
Нужно отметить, что проведенное тестирование, возможно, не совсем корректно, так как лучше было бы сравнивать производительность компьютера на одном и том же, самом новом микрокоде процессора, только с его модификацией для включения инструкций tsx.
Возможно, при майнинге можно было бы достичь лучших результатов в операционной системе с ядром, в котором была бы отключена блокировка tsx-команд. Тогда можно было бы использовать более новую ревизию микрокода процессора, например, для Intel I7-7700 — версию 0x6 вместо 0x8, в которой залочены tsx-блоки.


