Transactional Synchronization Extensions ( TSX ), также называемые Transactional Synchronization Extensions New Instructions ( TSX-NI ), являются расширением архитектуры набора инструкций x86 (ISA), которое добавляет аппаратную поддержку транзакционной памяти , ускоряя выполнение многопоточного программного обеспечения за счет исключения блокировок. Согласно различным тестам, TSX/TSX-NI может обеспечить примерно на 40% более быстрое выполнение приложений в определенных рабочих нагрузках и в 4–5 раз больше транзакций базы данных в секунду (TPS). [1] [2] [3] [4]
TSX/TSX-NI был задокументирован Intel в феврале 2012 года и дебютировал в июне 2013 года на некоторых микропроцессорах Intel на базе микроархитектуры Haswell . [5] [6] [7] Процессоры Haswell ниже 45xx, а также SKU серий R и K (с разблокированным множителем) не поддерживают TSX/TSX-NI. [8] В августе 2014 года Intel объявила об ошибке в реализации TSX/TSX-NI на текущих степпингах процессоров Haswell, Haswell-E, Haswell-EP и ранних процессорах Broadwell , что привело к отключению функции TSX/TSX-NI на затронутых процессорах через обновление микрокода . [9] [10]
В 2016 году была обнаружена атака по времени по сторонним каналам , которая заключалась в злоупотреблении способом обработки TSX/TSX-NI ошибок транзакций (т. е. ошибок страниц ) с целью нарушения рандомизации расположения адресного пространства ядра (KASLR) во всех основных операционных системах. [11] В 2021 году Intel выпустила обновление микрокода, которое отключило функцию TSX/TSX-NI в поколениях ЦП от Skylake до Coffee Lake в качестве смягчения обнаруженных проблем безопасности. [12]
Поддержка эмуляции TSX/TSX-NI предоставляется как часть Intel Software Development Emulator. [13] Также существует экспериментальная поддержка эмуляции TSX/TSX-NI в форке QEMU . [14]
TSX/TSX-NI предоставляет два программных интерфейса для обозначения областей кода для транзакционного выполнения. Hardware Lock Elision (HLE) — это интерфейс на основе префикса инструкций, разработанный для обеспечения обратной совместимости с процессорами без поддержки TSX/TSX-NI. Restricted Transactional Memory (RTM) — это новый интерфейс набора инструкций, который обеспечивает большую гибкость для программистов. [15]
TSX/TSX-NI обеспечивает оптимистичное выполнение транзакционных областей кода. Аппаратное обеспечение отслеживает несколько потоков на предмет конфликтующих обращений к памяти, прерывая и откатывая транзакции, которые не могут быть успешно завершены. Для программного обеспечения предусмотрены механизмы для обнаружения и обработки неудачных транзакций. [15]
Другими словами, обход блокировки посредством транзакционного выполнения использует транзакции памяти как быстрый путь, где это возможно, в то время как медленный (резервный) путь по-прежнему представляет собой обычную блокировку.
Hardware Lock Elision (HLE) добавляет два новых префикса инструкций, XACQUIRE
и XRELEASE
. Эти два префикса повторно используют коды операций существующих префиксов REPNE
/ ( / ). На процессорах, которые не поддерживают HLE, префиксы / игнорируются в инструкциях, для которых / являются допустимыми, что обеспечивает обратную совместимость. [16]REPE
F2H
F3H
REPNE
REPE
XACQUIRE
XRELEASE
Подсказку префикса XACQUIRE
можно использовать только со следующими инструкциями с явным LOCK
префиксом: ADD
, ADC
, AND
, BTC
, BTR
, BTS
, CMPXCHG
, CMPXCHG8B
, DEC
, INC
, NEG
, NOT
, OR
, SBB
, SUB
, XOR
, XADD
, и XCHG
. XCHG
Инструкцию можно использовать LOCK
и без префикса.
Префикс XRELEASE
hint можно использовать как с инструкциями, перечисленными выше, так и с инструкциями MOV mem, reg
и MOV mem, imm
.
HLE допускает оптимистичное выполнение критической секции, пропуская запись в блокировку, так что блокировка кажется свободной для других потоков. Неудачная транзакция приводит к перезапуску выполнения с XACQUIRE
инструкции с префиксом, но обрабатывает инструкцию так, как будто XACQUIRE
префикс отсутствует.
Ограниченная транзакционная память (RTM) — это альтернативная реализация HLE, которая дает программисту гибкость в указании пути кода отката, который выполняется, когда транзакция не может быть успешно выполнена. В отличие от HLE, RTM не имеет обратной совместимости с процессорами, которые ее не поддерживают. Для обеспечения обратной совместимости программы должны обнаружить поддержку RTM в ЦП перед использованием новых инструкций.
RTM добавляет три новые инструкции: XBEGIN
, XEND
и XABORT
. Инструкции XBEGIN
и XEND
отмечают начало и конец транзакционной области кода; XABORT
инструкция явно прерывает транзакцию. Сбой транзакции перенаправляет процессор на резервный путь кода, указанный инструкцией XBEGIN
, при этом статус прерывания возвращается в EAX
регистр.
TSX/TSX-NI предоставляет новую XTEST
инструкцию, которая возвращает, выполняет ли процессор транзакционный регион. Эта инструкция поддерживается процессором, если он поддерживает HLE или RTM или оба.
TSX/TSX-NI Suspend Load Address Tracking (TSXLDTRK) — это расширение набора инструкций, позволяющее временно отключать отслеживание загрузок из памяти в разделе кода в транзакционном регионе. Эта функция расширяет HLE и RTM, и ее поддержка в процессоре должна быть обнаружена отдельно.
TSXLDTRK вводит две новые инструкции, XSUSLDTRK
и XRESLDTRK
, для приостановки и возобновления отслеживания адреса загрузки соответственно. Пока отслеживание приостановлено, любые загрузки из памяти не будут добавлены в набор чтения транзакции. Это означает, что если только эти ячейки памяти не были добавлены в наборы чтения или записи транзакции за пределами региона приостановки, записи в эти ячейки другими потоками не приведут к прерыванию транзакции. Приостановка отслеживания адреса загрузки для части кода в транзакционном регионе позволяет уменьшить объем памяти, который необходимо отслеживать для конфликтов чтения-записи, и, следовательно, увеличить вероятность успешного завершения транзакции.
Спецификация Intel TSX/TSX-NI описывает, как транзакционная память предоставляется программистам, но не раскрывает подробности фактической реализации транзакционной памяти. [17] Intel указывает в своих руководствах для разработчиков и оптимизации, что Haswell поддерживает как наборы чтения, так и наборы записи с гранулярностью строки кэша, отслеживая адреса в кэше данных L1 процессора. [18] [19] [20] [21] Intel также заявляет, что конфликты данных обнаруживаются с помощью протокола когерентности кэша . [19]
Кэш данных L1 Haswell имеет ассоциативность восемь. Это означает, что в этой реализации транзакционное выполнение, которое записывает в девять различных мест, отображаемых в один и тот же набор кэшей, будет прервано. Однако из-за микроархитектурных реализаций это не означает, что меньшее количество обращений к одному и тому же набору гарантированно никогда не прервется. Кроме того, в конфигурациях ЦП с технологией Hyper-Threading кэш L1 совместно используется двумя потоками на одном ядре, поэтому операции в родственном логическом процессоре одного и того же ядра могут привести к вытеснениям. [19]
Независимые исследования указывают на то, что транзакционная память Haswell, скорее всего, является системой отложенного обновления, использующей кэши по ядрам для транзакционных данных и контрольных точек регистра. [17] Другими словами, Haswell, скорее всего, будет использовать систему транзакционной памяти на основе кэша, поскольку это гораздо менее рискованный выбор реализации. С другой стороны, Skylake от Intel или более поздние версии могут объединить этот подход на основе кэша с буфером упорядочения памяти (MOB) для той же цели, возможно, также предоставляя многоверсионную транзакционную память, которая более податлива для спекулятивной многопоточности . [22]
В августе 2014 года Intel объявила, что в реализации TSX/TSX-NI на процессорах Haswell, Haswell-E, Haswell-EP и ранних процессорах Broadwell существует ошибка, которая привела к отключению функции TSX/TSX-NI на затронутых процессорах с помощью обновления микрокода. [9] [10] [23] Ошибка была исправлена в степпингах F-0 процессора Core M-5Y70 Broadwell с поддержкой vPro в ноябре 2014 года. [24]
Ошибка была обнаружена и затем сообщена во время дипломной работы в Школе электротехники и вычислительной техники Национального технического университета Афин . [25]
В октябре 2018 года Intel раскрыла проблему с порядком памяти TSX/TSX-NI, обнаруженную в некоторых процессорах Skylake . [26] В результате обновления микрокода поддержка HLE была отключена в затронутых процессорах, а RTM был смягчен путем принесения в жертву одного счетчика производительности при использовании вне режима Intel SGX или режима управления системой ( SMM ). Системному программному обеспечению пришлось бы либо эффективно отключить RTM, либо обновить инструменты мониторинга производительности, чтобы не использовать затронутый счетчик производительности.
В июне 2021 года Intel опубликовала обновление микрокода, которое дополнительно отключает TSX/TSX-NI на различных моделях процессоров Xeon и Core от Skylake до Coffee Lake и Whiskey Lake в качестве смягчения уязвимости TSX Asynchronous Abort (TAA). Более раннее смягчение проблемы с порядком памяти было удалено. [27] По умолчанию с обновленным микрокодом процессор по-прежнему будет указывать на поддержку RTM, но всегда будет прерывать транзакцию. Системное программное обеспечение может определять этот режим работы и маскировать поддержку TSX/TSX-NI из инструкции CPUID
, предотвращая обнаружение TSX/TSX-NI приложениями. Системное программное обеспечение также может включать «режим разработки неподдерживаемого программного обеспечения», в котором RTM полностью активен, но в этом случае использование RTM может быть подвержено проблемам, описанным ранее, и поэтому этот режим не следует включать в производственных системах. В некоторых системах RTM не может быть повторно включен, когда активен SGX. HLE всегда отключен.
Согласно Руководству разработчика программного обеспечения для архитектур Intel 64 и IA-32 от мая 2020 г., Том 1, Глава 2.5 Удалены архитектура и функции набора инструкций Intel, [18] HLE был удален из продуктов Intel, выпущенных в 2019 г. и позже. RTM не документируется как удаленный. Однако клиентские процессоры Intel 10-го поколения Comet Lake и Ice Lake , выпущенные в 2020 г., не поддерживают TSX/TSX-NI, [28] [29] [30] [31] [32] включая как HLE, так и RTM. Инженерные версии процессоров Comet Lake по-прежнему сохраняли поддержку TSX/TSX-NI.
В справочнике по программированию расширений набора инструкций архитектуры Intel редакции 41 от октября 2020 г. [33] было задокументировано новое расширение набора инструкций TSXLDTRK. Впервые оно было включено в процессоры Sapphire Rapids , выпущенные в январе 2023 г.
В условиях сложного набора внутренних условий синхронизации и системных событий программное обеспечение, использующее инструкции Intel TSX/TSX-NI (Transactional Synchronization Extensions), может наблюдать непредсказуемое поведение системы.
Процессор отслеживает как адреса чтения, так и адреса записи в кэше данных первого уровня (кэш L1) процессора.
Весь "CPU выполняет мелкозернистые блокировки" основан на маркировке строк кэша L1 (64 Б), а их, если быть точным, 512 (64 x 512 = 32 КБ). На каждую строку кэша приходится только один "тег блокировки".
BDM53
1
E-0: X, F-0:, Статус: Исправлено ERRATA: Инструкции Intel TSX недоступны. 1. Применимо к процессору Intel Core M-5Y70. Intel TSX поддерживается на процессоре Intel Core M-5Y70 с технологией Intel vPro. Intel TSX не поддерживается на других процессорах SKU.
Обновление микрокода от октября 2018 г. также отключило префикс инструкций HLE Intel TSX и принудительно отменило все транзакции RTM при работе в режиме Intel SGX или режиме управления системой (SMM).