Расширения транзакционной синхронизации ( TSX ), также называемый Transactional Synchronization Extensions New Instructions (TSX-NI ), является расширением инструкции x86 установить архитектуру (ISA), которая добавляет аппаратную поддержку транзакционной памяти, ускоряя выполнение многопоточного программного обеспечения за счет исключения блокировок. Согласно различным тестам, TSX / TSX-NI может обеспечить примерно на 40% более быстрое выполнение приложений при определенных рабочих нагрузках и в 4–5 раз больше транзакций базы данных в секунду (TPS).
TSX / TSX-NI был задокументирован Intel в феврале 2012 года и дебютировал в июне 2013 года на некоторых микропроцессорах Intel на основе микроархитектуры Haswell. Процессоры Haswell ниже 45xx, а также серии R и K (с разблокированным множителем) SKU не поддерживают TSX / TSX-NI. В августе 2014 года Intel объявила об ошибке в реализации TSX / TSX-NI на текущих степпингах процессоров Haswell, Haswell-E, Haswell-EP и ранних Broadwell, что привело к отключению TSX / TSX-NI. функция на затронутых процессорах с помощью обновления микрокода.
В 2016 году была обнаружена боковая ссылка временная атака путем злоупотребления способом TSX / TSX-NI обрабатывает транзакционные ошибки (т. Е. ошибки страницы ), чтобы нарушить KASLR во всех основных операционных системах.
Поддержка эмуляции TSX / TSX-NI предоставляется как часть эмулятора разработки программного обеспечения Intel. Также имеется экспериментальная поддержка эмуляции TSX / TSX-NI в вилке QEMU.
TSX / TSX-NI предоставляет два программных интерфейса для обозначения областей кода для выполнения транзакций. Hardware Lock Elision (HLE) - это интерфейс на основе префиксов команд, предназначенный для обратной совместимости с процессорами без поддержки TSX / TSX-NI. Ограниченная транзакционная память (RTM) - это новый интерфейс набора команд, который обеспечивает большую гибкость для программистов.
TSX / TSX-NI обеспечивает оптимистичное выполнение областей транзакционного кода. Аппаратное обеспечение отслеживает несколько потоков на предмет конфликтующих обращений к памяти, прерывая и откатывая транзакции, которые не могут быть успешно завершены. Для программного обеспечения предусмотрены механизмы обнаружения и обработки неудачных транзакций.
Другими словами, снятие блокировки посредством выполнения транзакции использует транзакции памяти как быстрый путь, где это возможно, в то время как медленный (резервный) путь по-прежнему является нормальной блокировкой.
Аппаратная блокировка Elision (HLE) добавляет два новых префикса инструкций, XACQUIRE
и XRELEASE
. Эти два префикса повторно используют коды операций существующих префиксов REPNE
/ REPE
(F2H
/ F3H
). На процессорах, не поддерживающих HLE, префиксы REPNE
/ REPE
игнорируются в инструкциях, для которых действительны XACQUIRE
/ XRELEASE
, поэтому включение обратной совместимости.
Подсказка префикса XACQUIRE
может использоваться только со следующими инструкциями с явным префиксом LOCK
: ADD
, АЦП
, И
, BTC
, BTR
, BTS
, CMPXCHG
, CMPXCHG8B
, DEC
, INC
, NEG
, NOT
, OR
, SBB
, SUB
, XOR
, XADD
и XCHG
. Инструкцию XCHG
можно также использовать без префикса LOCK
.
Подсказка префикса XRELEASE
может использоваться как с инструкциями, перечисленными выше, так и с MOV mem, reg
и MOV mem, imm
инструкции.
HLE позволяет оптимистично выполнять критический раздел, пропуская запись в блокировку, так что блокировка кажется свободной для других потоков. Неудачная транзакция приводит к перезапуску выполнения с инструкции с префиксом XACQUIRE
, но обработка инструкции так, как если бы префикс XACQUIRE
отсутствовал.
Ограниченная транзакционная память (RTM) - это альтернативная реализация HLE, которая дает программисту гибкость в указании пути резервного кода, который выполняется, когда транзакция не может быть успешно выполнена. В отличие от HLE, RTM не имеет обратной совместимости с процессорами, которые ее не поддерживают. Для обратной совместимости программы должны обнаруживать поддержку RTM в ЦП перед использованием новых инструкций.
RTM добавляет три новые инструкции: XBEGIN
, XEND
и XABORT
. Инструкции XBEGIN
и XEND
отмечают начало и конец области кода транзакции; инструкция XABORT
явно прерывает транзакцию. Ошибка транзакции перенаправляет процессор на путь резервного кода, указанный инструкцией XBEGIN
, со статусом прерывания, возвращаемым в регистре EAX
.
Регистр EAX. позиция бита | Значение |
---|---|
0 | Устанавливается, если прерывание вызвано инструкцией XABORT . |
1 | Если установлено, транзакция может быть успешной при повторной попытке. Этот бит всегда сброшен, если установлен бит 0. |
2 | Устанавливается, если другой логический процессор вступил в конфликт с адресом памяти, который был частью прерванной транзакции. |
3 | Устанавливается, если внутренний буфер переполнен. |
4 | Устанавливается, если сработала точка останова отладки. |
5 | Устанавливается, если во время выполнения вложенной транзакции произошло прерывание. |
23:6 | Зарезервировано. |
31:24 | аргумент XABORT (действителен, только если установлен бит 0, в противном случае зарезервирован). |
XTEST
инструкцияTSX / TSX-NI предоставляет новую инструкцию XTEST
, которая возвращает, выполняет ли процессор транзакционную область. Эта инструкция поддерживается процессором, если он поддерживает HLE, RTM или и то, и другое.
Отслеживание адреса приостановки загрузки TSX / TSX-NI (TSXLDTRK) - это расширение набора команд, которое позволяет временно отключить отслеживание нагрузок из памяти в разделе кода внутри транзакционный регион. Эта функция расширяет HLE и RTM, и ее поддержка в процессоре должна определяться отдельно.
TSXLDTRK представляет две новые инструкции, XSUSLDTRK
и XRESLDTRK
, для приостановки и возобновления отслеживания адреса загрузки соответственно. Пока отслеживание приостановлено, любые загрузки из памяти не будут добавлены к набору чтения транзакции. Это означает, что, если эти ячейки памяти не были добавлены к наборам чтения или записи транзакции за пределами области приостановки, запись в эти места другими потоками не вызовет прерывания транзакции. Приостановка отслеживания адреса загрузки для части кода в транзакционной области позволяет уменьшить объем памяти, который необходимо отслеживать на предмет конфликтов чтения-записи, и, следовательно, повысить вероятность успешного принятия транзакции.
Спецификация Intel TSX / TSX-NI описывает, как транзакционная память предоставляется программистам, но не раскрывает подробностей о фактической реализации транзакционной памяти. Intel указывает в своих руководствах для разработчиков и по оптимизации, что Haswell поддерживает наборы для чтения и записи с детализацией строки кэша, отслеживая адреса в кэше данных L1 процессора. Intel также заявляет, что конфликты данных обнаруживаются с помощью протокола согласованности кэша.
Кэш данных L1 Haswell имеет ассоциативность восемь. Это означает, что в этой реализации транзакционное выполнение, которое записывает в девять различных местоположений, отображаемых в один и тот же набор кешей, будет прервано. Однако из-за реализации микроархитектуры это не означает, что меньшее количество обращений к одному и тому же набору гарантированно никогда не прервется. Кроме того, в конфигурациях ЦП с технологией Hyper-Threading кэш L1 используется совместно двумя потоками в одном ядре, поэтому операции в логическом процессоре одного и того же ядра могут вызывать вытеснение.
Независимые исследования указывают на то, что транзакционная память Haswell, скорее всего, представляет собой систему отложенного обновления, использующую кеши для каждого ядра для транзакционных данных и контрольные точки регистров. Другими словами, Haswell с большей вероятностью будет использовать систему транзакционной памяти на основе кеша, поскольку это гораздо менее рискованный вариант реализации. С другой стороны, Intel Skylake или более поздняя версия может комбинировать этот подход на основе кеширования с буфером упорядочения памяти (MOB) для той же цели, возможно, также предоставляя многоверсионную транзакционную память, более подходящую для спекулятивная многопоточность.
В августе 2014 г. корпорация Intel объявила об ошибке в реализации TSX / TSX-NI на процессорах Haswell, Haswell-E, Haswell-EP и ранних процессорах Broadwell, что привело к отключению функции TSX / TSX-NI на затронутые процессоры через обновление микрокода. Ошибка была исправлена в степпингах F-0 процессора Core M-5Y70 Broadwell с поддержкой vPro в ноябре 2014 года.
Ошибка была обнаружена, и о ней было сообщено во время дипломной работы в Школе электротехники и компьютерной инженерии. Афинский национальный технический университет.
Согласно Справочному руководству по оптимизации архитектур Intel 64 и IA-32 от мая 2020 г., том 1, глава 2.5. Архитектура набора команд Intel и функции удалены, HLE удалена из продуктов Intel, выпущенных в 2019 г. и позже. RTM не документируется как удаленная. Однако процессоры Intel 10-го поколения Comet Lake и Ice Lake, выпущенные в 2020 году, не поддерживают TSX / TSX-NI, включая HLE и RTM.
В версии 41 справочника по программированию расширений набора команд архитектуры Intel от октября 2020 года было задокументировано новое расширение набора команд TSXLDTRK, которое планируется включить в будущие процессоры Sapphire Rapids.
| journal =
(). Программные улучшения аппаратного исключения блокировки в Intel TSX.