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, а также R-серия и К-серия (с разблокированным множителем) SKUs не поддерживают 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]
Поддержка эмуляции TSX / TSX-NI предоставляется как часть эмулятора разработки программного обеспечения Intel. [12] Существует также экспериментальная поддержка эмуляции TSX / TSX-NI в ответвлении QEMU . [13]
Особенности [ править ]
TSX / TSX-NI предоставляет два программных интерфейса для обозначения областей кода для выполнения транзакций. Hardware Lock Elision (HLE) - это интерфейс на основе префиксов инструкций, предназначенный для обратной совместимости с процессорами без поддержки TSX / TSX-NI. Ограниченная транзакционная память (RTM) - это новый интерфейс набора команд, который обеспечивает большую гибкость для программистов. [14]
TSX / TSX-NI обеспечивает оптимистичное выполнение областей транзакционного кода. Оборудование отслеживает несколько потоков на предмет конфликтующих обращений к памяти, при этом прерывая и откатывая транзакции, которые не могут быть успешно завершены. Для программного обеспечения предусмотрены механизмы обнаружения и обработки неудачных транзакций. [14]
Другими словами, снятие блокировки посредством выполнения транзакции использует транзакции памяти как быстрый путь, где это возможно, в то время как медленный (резервный) путь по-прежнему является нормальной блокировкой.
Аппаратная блокировка Elision [ править ]
Hardware Lock Elision (HLE) добавляет два новых префикса инструкций XACQUIRE
и XRELEASE
. Эти два префиксы повторного использования опкодов существующих REPNE
/ REPE
префиксов ( F2H
/ F3H
). На процессорах , которые не поддерживают HLE, REPNE
/ REPE
префиксы игнорируются по инструкции , для которых XACQUIRE
/ XRELEASE
справедливы, что позволяет обратную совместимость. [15]
XACQUIRE
Приставка подсказку можно использовать только со следующими инструкциями с явным LOCK
префиксом: ADD
, ADC
, AND
, 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 Suspend Load Address Tracking [ править ]
TSX / TSX-NI Suspend Load Address Tracking (TSXLDTRK) - это расширение набора инструкций, которое позволяет временно отключить отслеживание загрузки из памяти в разделе кода в транзакционной области. Эта функция расширяет HLE и RTM, и ее поддержка в процессоре должна определяться отдельно.
TSXLDTRK представляет две новые инструкции XSUSLDTRK
и XRESLDTRK
для приостановки и возобновления отслеживания адреса загрузки, соответственно. Пока отслеживание приостановлено, любые загрузки из памяти не будут добавлены к набору чтения транзакции. Это означает, что, если эти ячейки памяти не были добавлены к наборам чтения или записи транзакции за пределами области приостановки, запись в эти места другими потоками не вызовет прерывания транзакции. Приостановка отслеживания адреса загрузки для части кода в транзакционной области позволяет уменьшить объем памяти, который необходимо отслеживать на предмет конфликтов чтения-записи, и, следовательно, повысить вероятность успешного принятия транзакции.
Реализация [ править ]
Этот раздел необходимо обновить . Июнь 2017 г. ) ( |
Спецификация Intel TSX / TSX-NI описывает, как транзакционная память предоставляется программистам, но не содержит подробностей о фактической реализации транзакционной памяти. [16] Intel указывает в своих руководствах для разработчиков и по оптимизации, что Haswell поддерживает наборы для чтения и записи на уровне детализации строки кэша, отслеживая адреса в кэше данных L1 процессора. [17] [18] [19] [20] Intel также заявляет, что конфликты данных обнаруживаются с помощью протокола согласования кэша . [18]
Кэш данных L1 Haswell имеет ассоциативность восемь. Это означает, что в этой реализации транзакционное выполнение, которое записывает в девять различных местоположений, отображаемых в один и тот же набор кеша, будет прервано. Однако из-за микроархитектурных реализаций это не означает, что меньшее количество обращений к одному и тому же набору гарантированно никогда не прервется. Кроме того, в конфигурациях ЦП с технологией Hyper-Threading кэш L1 совместно используется двумя потоками в одном ядре, поэтому операции в логическом процессоре одного уровня с тем же ядром могут вызвать вытеснение. [18]
Независимые исследования указывают на то, что транзакционная память Haswell, скорее всего, является системой отложенного обновления, использующей кеши для каждого ядра для транзакционных данных и контрольных точек регистрации. [16] Другими словами, Haswell с большей вероятностью будет использовать систему транзакционной памяти на основе кеша, поскольку это гораздо менее рискованный вариант реализации. С другой стороны, Intel Skylake или более поздняя версия может комбинировать этот подход на основе кеширования с буфером упорядочения памяти (MOB) для той же цели, возможно, также обеспечивая многоверсионную транзакционную память, которая более поддается спекулятивной многопоточности . [21]
В августе 2014 года Intel объявила об ошибке в реализации TSX / TSX-NI на процессорах Haswell, Haswell-E, Haswell-EP и ранних процессорах Broadwell, что привело к отключению функции TSX / TSX-NI на затронутых процессорах с помощью микрокода. Обновить. [9] [10] [22] Ошибка была исправлена в степпингах F-0 процессора Core M-5Y70 Broadwell с поддержкой vPro в ноябре 2014 года. [23]
Ошибка была обнаружена, и о ней было сообщено во время дипломной работы в Школе электротехники и вычислительной техники Афинского национального технического университета . [24]
Согласно Справочному руководству по оптимизации архитектур Intel 64 и IA-32 от мая 2020 г., том 1, глава 2.5. Архитектура набора команд Intel и удаленные функции [17] HLE был удален из продуктов Intel, выпущенных в 2019 г. и позже. RTM не документируется как удаленная. Однако процессоры Intel Comet Lake и Ice Lake 10-го поколения , выпущенные в 2020 году, не поддерживают TSX / TSX-NI, [25] [26] [27] [28] [29], включая HLE и RTM.
В справочнике по программированию расширений набора инструкций архитектуры Intel, редакция 41 от октября 2020 г. [30], новое расширение набора инструкций TSXLDTRK было задокументировано и намечено для включения в грядущие процессоры Sapphire Rapids .
См. Также [ править ]
- Advanced Synchronization Facility ( конкурирующая технология AMD )
- Транзакционная память
Ссылки [ править ]
- ^ Ричард М. Ю; Кристофер Дж. Хьюз; Конрад Лай; Рави Раджвар (ноябрь 2013 г.). «Оценка производительности расширений Intel Transactional Synchronization Extensions для высокопроизводительных вычислений» (PDF) . intel-research.net . Архивировано из оригинального (PDF) 24.10.2016 . Проверено 14 ноября 2013 .
- ^ Tomas Karnagel; Роман Дементьев; Рави Раджвар; Конрад Лай; Томас Леглер; Бенджамин Шлегель; Вольфганг Ленер (февраль 2014 г.). «Повышение производительности индекса базы данных в памяти с помощью расширений Intel Transactional Synchronization Extensions» (PDF) . software.intel.com . Проверено 3 марта 2014 .
- ^ «Оценка производительности расширений Intel Transactional Synchronization Extensions для высокопроизводительных вычислений» . supercomputing.org . Ноября 2013 . Проверено 14 ноября 2013 .
- ^ «Тесты: TSX и пропускная способность транзакций памяти Haswell (HLE и RTM)» . sisoftware.co.uk . Проверено 14 ноября 2013 .
- ^ «Транзакционная синхронизация в Haswell» . Software.intel.com . Проверено 7 февраля 2012 .
- ^ «Транзакционная память становится основной с Intel Haswell» . Ars Technica . 2012-02-08 . Проверено 9 февраля 2012 .
- ^ "Обзор Core i7-4770K" . Оборудование Тома. 2013-06-01 . Проверено 3 июня 2012 .
- ^ «Intel Сравнительная таблица моделей Haswell Pentium, i3, i5 и i7» . intel.com . Проверено 11 февраля 2014 .
- ^ a b Скотт Уоссон (2014-08-12). «Исправление побуждает Intel отключить TSX в Haswell, ранних процессорах Broadwell» . techreport.com . Проверено 12 августа 2014 .
- ^ a b «Семейство процессоров Intel Core 4-го поколения для настольных ПК, семейство процессоров Intel Pentium для настольных ПК и семейство процессоров Intel Celeron для настольных ПК: обновление спецификаций (редакция 014)» (PDF) . Intel . Июнь 2014. с. 46 . Проверено 13 августа 2014 .
При сложном наборе внутренних временных условий и системных событий программное обеспечение, использующее инструкции Intel TSX / TSX-NI (Transactional Synchronization Extensions), может наблюдать непредсказуемое поведение системы.
- ^ «Нарушение рандомизации адресного пространства ядра с помощью Intel TSX» (PDF) . 2016 г.
- ^ Уён Ким (2013-07-25). «Удовольствие от Intel Transactional Synchronization Extensions» . Intel . Проверено 12 ноября 2013 .
- ^ Себастьян Дабдоуб; Стивен Ту. «Поддержка расширений Intel Transactional Synchronization Extensions в QEMU» (PDF) . mit.edu . Проверено 12 ноября 2013 .
- ^ а б Йохан Де Гелас (2012-09-20). «Осмысление расширений транзакционной синхронизации Intel Haswell» . AnandTech . Проверено 20 октября 2013 .
- ^ «Обзор аппаратного снятия блокировки» . intel.com. Архивировано из оригинала на 2013-10-29 . Проверено 27 октября 2013 .
- ^ а б Дэвид Кантер (2012-08-21). «Анализ транзакционной памяти Haswell» . Технологии реального мира . Проверено 19 ноября 2013 .
- ^ a b «Объединенные тома руководства разработчика программного обеспечения для архитектур Intel 64 и IA-32: 1, 2A, 2B, 2C, 3A, 3B и 3C» (PDF) . Intel. Сентябрь 2013. с. 342 . Проверено 19 ноября 2013 .
- ^ a b c «Справочное руководство по оптимизации архитектур Intel 64 и IA-32» (PDF) . Intel. Сентябрь 2013. с. 446 . Проверено 19 ноября 2013 .
- ^ «Свойства реализации Intel TSX» . Intel. 2013 . Проверено 14 ноября 2013 .
Процессор отслеживает как адреса установки чтения, так и адреса установки записи в кэше данных первого уровня (кэш L1) процессора.
- ^ De Gelas, Йохан (20 сентября 2012). «Осмысление расширений транзакционной синхронизации Intel Haswell» . AnandTech . Проверено 23 декабря 2013 года .
«ЦП выполняет мелкозернистые блокировки» основан на тегировании строк кэша L1 (64 Б), и их 512, чтобы быть конкретными (64 x 512 = 32 КБ).
Для каждой строки кэша существует только один «тег блокировки».
- ↑ Дэвид Кантер (21 августа 2012). «Альтернативы транзакционной памяти Haswell» . Технологии реального мира . Проверено 14 ноября 2013 .
- ^ Ян Катресс (2014-08-12). «Intel отключает инструкции TSX: ошибка в Haswell, Haswell-E / EP, Broadwell-Y» . AnandTech . Проверено 30 августа 2014 .
- ^ «Семейство процессоров Intel Core M. Обновление спецификации. Декабрь 2014 г. Версия 003. 330836-003» (PDF) . Intel . Декабрь 2014. с. 10 . Проверено 28 декабря 2014 .
BDM53
1
E-0: X, F-0 :, Статус: исправлено. ОШИБКА: инструкции Intel TSX недоступны.
1. Относится к процессору Intel Core M-5Y70.
Intel TSX поддерживается процессором Intel Core M-5Y70 с технологией Intel vPro.
Intel TSX не поддерживается на процессорах других SKU.
- ^ "Информация о HiPEAC" (PDF) . п. 12. Архивировано из оригинального (PDF) 05 марта 2017 года.
- ^ «Технические характеристики процессора Intel® Core ™ i9-10900K» . Intel. 2020 . Проверено 10 октября 2020 .
- ^ «Технические характеристики процессора Intel® Core ™ i9-10980HK» . Intel. 2020 . Проверено 10 октября 2020 .
- ^ «Технические характеристики процессора Intel® Core ™ i7-10810U» . Intel. 2020 . Проверено 10 октября 2020 .
- ^ «Технические характеристики процессора Intel® Xeon® W-1290P» . Intel. 2020 . Проверено 10 октября 2020 .
- ^ «Технические характеристики процессора Intel® Core ™ i7-1068NG7» . Intel. 2020 . Проверено 10 октября 2020 .
- ^ «Справочник по программированию расширений набора команд архитектуры Intel® (PDF)» (PDF) . Intel. 2020 . Проверено 21 октября 2020 .
Дальнейшее чтение [ править ]
- Afek, Y .; Леви, А .; Моррисон, А. (2014). Материалы симпозиума ACM 2014 г. по принципам распределенных вычислений - PODC '14 . Программно-улучшенная аппаратная блокировка, стр. 212. DOI : 10,1145 / 2611462,2611482 . ISBN 9781450329446. S2CID 16645370 .. Программные улучшения аппаратной блокировки в Intel TSX.
Внешние ссылки [ править ]
- Презентация IDF 2012 (PDF)
- Добавление блокировки в Linux , Linux Plumbers Conference 2012 (PDF)
- Lock elision в библиотеке GNU C , LWN.net , 30 января 2013 г., Энди Клин
- Руководство по оптимизации TSX , глава 12 (PDF)
- Руководство разработчика программного обеспечения , том 1, глава 2.5 (PDF)
- Интернет-ресурсы о расширениях Intel Transactional Synchronization Extensions
- x86, микрокод: ОШИБКА: обновление микрокода, изменяющее x86_capability , LKML , сентябрь 2014 г. (есть еще один похожий отчет об ошибке )
- Микрокод Intel , Gentoo, 19 сентября 2015 г.