Исследователь Кристофер Домас запустил «антирейтинг» x86-инструкций asm-hall-of-shame, где первое место заняла fxrstor64 — 62 секунды, или около 198 миллиардов тактов на одно выполнение
Рекордного результата добились через обращения к процессору по MMIO и «голодание» шины PCIe, из-за чего восстановление регистров вставало в очередь позади бесполезных операций чтения
В следующем эксперименте с xrstor64 на Intel Sapphire Rapids задержку планируют довести до триллиона тактов — за счёт увеличения области состояния AMX до 8 КБ
В тестах фигурируют Intel Core i7-8559U и AMD Ryzen 7 5800H, а отдельный рекорд поставил старый VIA Eden с командой rdmsr, упершейся в недокументированный регистр
Обычно задержки процессорных инструкций изучают, чтобы ускорить работу приложений или найти узкие места архитектуры. Инженер Кристофер Домас (на GitHub — @xoreaxeaxeax) решил зайти с другой стороны: вместо самых быстрых команд он начал искать самые медленные. Проект получил название asm-hall-of-shame — «зал позора ассемблера» — и оформлен как открытый рейтинг на GitHub, где задача одна: заставить единственную инструкцию процессора выполняться как можно дольше.
Источник изображения — tomshardware.com
Как fxrstor64 довели до 62 секунд
В обычных условиях fxrstor64 восстанавливает состояние регистров для SIMD-вычислений — блок из 512 байт — за считаные десятки тактов. Чтобы сломать этот сценарий, Домас сначала прогнал процессор через собственный инструмент mmiotic и нашёл в PCIe-фабрике зону с аномально высокой задержкой отклика. Затем он заставил CPU читать все 512 байт состояния именно оттуда — через MMIO (Memory-Mapped I/O, то есть доступ к устройствам через адреса памяти). Уже это дало 74,58 млрд тактов, то есть 23,35 секунды на одну команду.
Чтобы выжать из инструкции ещё больше, Домас «заморил» шину прямо во время загрузки: несколько соседних ядер в это время долбили другой медленный MMIO-регистр короткими 4-байтными чтениями, забивая корневой комплекс PCIe непринятыми (non-posted) транзакциями. Восстановлению состояния через fxrstor64 пришлось встать в очередь позади этого потока «мусорных» запросов — итоговое время выполнения выросло до 198 002 498 236 тактов, то есть 62 секунд. Тестировали на связке AMD Ryzen 7 5800H с графикой Radeon (мини-ПК Trigkey S5).
Дальше — xrstor64 и AMX на Sapphire Rapids
Следующая цель Домаса — инструкция xrstor64 на процессорах Intel Sapphire Rapids с поддержкой AMX (Advanced Matrix Extensions). У неё область сохраняемого состояния намного больше — около 8 КБ против 512 байт у fxrstor64, то есть в 16 раз. По расчётам исследователя, та же схема с MMIO и «голодающей» шиной способна довести время выполнения примерно до триллиона тактов процессора — это уже далеко за пределы одной минуты.
Все пытаются сделать процессоры быстрее. Я пытаюсь сделать их хуже. Новый проект: деоптимизация CPU. Ищу самые медленные машинные инструкции. Рекорд x86: 198 002 498 236 тактов, 62 секунды. Зал позора ассемблера — на GitHub. — Крис Домас (@xoreaxeaxeax), 7 августа 2026 года
Как считают рекорд: правила таблицы лидеров
Чтобы результаты разных участников можно было сравнивать, Домас сформулировал несколько условий:
- Для настройки среды подходит любая конфигурация, но засчитывается время выполнения только одной инструкции
- Прерываемые команды исключаются — например, rep movs или pause в зачёт не идут
- Для перехваченных или эмулированных инструкций считается только время самого перехвата, а не работы обработчика
- Все результаты нормализуются по базовой частоте процессора
- Платформы тестируют без аппаратных модификаций, в заводской конфигурации
От nop за один такт до VIA Eden с загадочным регистром
Основные результаты Домас получил на двух системах — Intel Core i7-8559U и AMD Ryzen 7 5800H. Но для одной строчки таблицы понадобился совсем другой процессор — VIA Eden с частотой 800 МГц, представитель линейки встраиваемых чипов начала 2000-х. На нём инструкция rdmsr (чтение модельно-специфичного регистра, MSR) обратилась к недокументированному адресу 0x133 и «зависла» на 161 602 такта — около 202 микросекунд. Что именно скрывается за этим регистром, Домас сказать не берётся: по его словам, VIA использует его для чего-то, что даёт аномально высокий отклик.
В остальной части таблицы лидеров хорошо видно, с чего стартует и куда движется задержка обычных команд:
- nop — 1 такт, естественная нижняя граница таблицы
- rdrand — около 5 579 тактов из-за истощения аппаратного пула энтропии при частых вызовах подряд
- wrmsr — порядка 34 300 тактов на отдельных регистрах AMD Zen, синхронизирующих банки ошибок MCA
- wbinvd — свыше 1,6 млн тактов на полную запись «грязных» строк кеша всех уровней в память
- mov с обращением к «глухому» MMIO-регистру видеочипа — уже сотни миллионов тактов, тем же приёмом, что и в случае с fxrstor64
Домас планирует собрать аналогичные таблицы лидеров для ARM и RISC-V, а исходный код и методику тестирования уже выложил на GitHub в репозитории asm-hall-of-shame. Это не первый его эксперимент на грани абсурда: ранее он написал movfuscator — компилятор C, переводящий любую программу в набор из одной-единственной инструкции mov, наглядно показывая, что даже она одна теоретически «полна по Тьюрингу» и способна выполнить произвольные вычисления.














