Transactional Synchronization Extensions ( TSX ), también denominada Transactional Synchronization Extensions New Instructions ( TSX-NI ), es una extensión de la arquitectura del conjunto de instrucciones (ISA) x86 que añade compatibilidad con memoria transaccional de hardware , acelerando la ejecución de software multiproceso mediante la elisión de bloqueos. Según diferentes puntos de referencia, TSX/TSX-NI puede proporcionar una ejecución de aplicaciones alrededor de un 40 % más rápida en cargas de trabajo específicas y entre 4 y 5 veces más transacciones de base de datos por segundo (TPS). [1] [2] [3] [4]
Intel documentó el TSX/TSX-NI en febrero de 2012 y debutó en junio de 2013 en microprocesadores Intel seleccionados basados en la microarquitectura Haswell . [5] [6] [7] Los procesadores Haswell inferiores a 45xx, así como los SKU de las series R y K (con multiplicador desbloqueado) no admiten el TSX/TSX-NI. [8] En agosto de 2014, Intel anunció un error en la implementación del TSX/TSX-NI en las versiones actuales de las CPU Haswell, Haswell-E, Haswell-EP y las primeras Broadwell , lo que provocó la desactivación de la función TSX/TSX-NI en las CPU afectadas a través de una actualización de microcódigo . [9] [10]
En 2016, se encontró un ataque de sincronización de canal lateral al abusar de la forma en que TSX/TSX-NI maneja fallas transaccionales (es decir, fallas de página ) para romper la aleatorización del diseño del espacio de direcciones del kernel (KASLR) en todos los sistemas operativos principales. [11] En 2021, Intel lanzó una actualización de microcódigo que deshabilitó la función TSX/TSX-NI en las generaciones de CPU desde Skylake hasta Coffee Lake , como mitigación de los problemas de seguridad descubiertos. [12]
El soporte para la emulación TSX/TSX-NI se proporciona como parte del emulador de desarrollo de software Intel. [13] También hay soporte experimental para la emulación TSX/TSX-NI en una bifurcación de QEMU . [14]
TSX/TSX-NI ofrece dos interfaces de software para designar regiones de código para la ejecución transaccional. La elisión de bloqueo de hardware (HLE) es una interfaz basada en prefijos de instrucciones diseñada para ser compatible con versiones anteriores de procesadores sin soporte TSX/TSX-NI. La memoria transaccional restringida (RTM) es una nueva interfaz de conjunto de instrucciones que proporciona mayor flexibilidad para los programadores. [15]
TSX/TSX-NI permite la ejecución optimista de regiones de código transaccional. El hardware monitorea múltiples subprocesos para detectar accesos conflictivos a la memoria, mientras cancela y revierte transacciones que no se pueden completar con éxito. Se proporcionan mecanismos para que el software detecte y gestione transacciones fallidas. [15]
En otras palabras, la elisión de bloqueo a través de la ejecución transaccional utiliza transacciones de memoria como una ruta rápida cuando es posible, mientras que la ruta lenta (de reserva) sigue siendo un bloqueo normal.
La elisión de bloqueo de hardware (HLE) agrega dos nuevos prefijos de instrucciones, XACQUIRE
y XRELEASE
. Estos dos prefijos reutilizan los códigos de operación de los prefijos REPNE
/ existentes ( / ). En los procesadores que no admiten HLE, los prefijos / se ignoran en las instrucciones para las que los / son válidos, lo que permite la compatibilidad con versiones anteriores. [16]REPE
F2H
F3H
REPNE
REPE
XACQUIRE
XRELEASE
La XACQUIRE
sugerencia de prefijo solo se puede utilizar con las siguientes instrucciones con un LOCK
prefijo explícito: ADD
, ADC
, AND
, BTC
, BTR
, BTS
, CMPXCHG
, , , , , , , , , CMPXCHG8B
, y . La instrucción también se puede utilizar sin el prefijo.DEC
INC
NEG
NOT
OR
SBB
SUB
XOR
XADD
XCHG
XCHG
LOCK
El XRELEASE
prefijo hint se puede utilizar tanto con las instrucciones enumeradas anteriormente como con las instrucciones MOV mem, reg
and MOV mem, imm
.
HLE permite la ejecución optimista de una sección crítica al omitir la escritura en un bloqueo, de modo que el bloqueo parezca estar libre para otros subprocesos. Una transacción fallida hace que la ejecución se reinicie desde la XACQUIRE
instrucción con prefijo -, pero se trata la instrucción como si el XACQUIRE
prefijo no estuviera presente.
La memoria transaccional restringida (RTM) es una implementación alternativa a HLE que brinda al programador la flexibilidad de especificar una ruta de código de respaldo que se ejecuta cuando una transacción no se puede ejecutar correctamente. A diferencia de HLE, RTM no es compatible con versiones anteriores de procesadores que no la admiten. Para lograr la compatibilidad con versiones anteriores, se requiere que los programas detecten la compatibilidad con RTM en la CPU antes de usar las nuevas instrucciones.
RTM agrega tres nuevas instrucciones: XBEGIN
, XEND
y XABORT
. Las instrucciones XBEGIN
y XEND
marcan el inicio y el final de una región de código transaccional; la XABORT
instrucción cancela explícitamente una transacción. Si falla la transacción, el procesador se redirige a la ruta de código de respaldo especificada por la XBEGIN
instrucción y el estado de cancelación se devuelve en el EAX
registro.
TSX/TSX-NI proporciona una nueva XTEST
instrucción que indica si el procesador está ejecutando una región transaccional. El procesador admite esta instrucción si es compatible con HLE o RTM o ambos.
TSX/TSX-NI Suspend Load Address Tracking (TSXLDTRK) es una extensión del conjunto de instrucciones que permite desactivar temporalmente el seguimiento de cargas desde la memoria en una sección de código dentro de una región transaccional. Esta función amplía HLE y RTM, y su compatibilidad en el procesador debe detectarse por separado.
TSXLDTRK introduce dos nuevas instrucciones, XSUSLDTRK
y XRESLDTRK
, para suspender y reanudar el seguimiento de direcciones de carga, respectivamente. Mientras el seguimiento está suspendido, no se agregarán cargas de la memoria al conjunto de lectura de la transacción. Esto significa que, a menos que estas ubicaciones de memoria se hayan agregado a los conjuntos de lectura o escritura de la transacción fuera de la región de suspensión, las escrituras en estas ubicaciones por parte de otros subprocesos no causarán la interrupción de la transacción. Suspender el seguimiento de direcciones de carga para una parte del código dentro de una región transaccional permite reducir la cantidad de memoria que se debe rastrear para detectar conflictos de lectura y escritura y, por lo tanto, aumenta la probabilidad de confirmación exitosa de la transacción.
La especificación TSX/TSX-NI de Intel describe cómo se expone la memoria transaccional a los programadores, pero oculta detalles sobre la implementación real de la memoria transaccional. [17] Intel especifica en sus manuales para desarrolladores y optimización que Haswell mantiene tanto los conjuntos de lectura como los conjuntos de escritura con la granularidad de una línea de caché, rastreando direcciones en la caché de datos L1 del procesador. [18] [19] [20] [21] Intel también afirma que los conflictos de datos se detectan a través del protocolo de coherencia de caché . [19]
La caché de datos L1 de Haswell tiene una asociatividad de ocho. Esto significa que en esta implementación, una ejecución transaccional que escribe en nueve ubicaciones distintas que se asignan al mismo conjunto de caché se abortará. Sin embargo, debido a las implementaciones de microarquitectura, esto no significa que se garantice que menos accesos al mismo conjunto nunca se abortarán. Además, en configuraciones de CPU con tecnología Hyper-Threading , la caché L1 se comparte entre los dos subprocesos en el mismo núcleo, por lo que las operaciones en un procesador lógico hermano del mismo núcleo pueden causar expulsiones. [19]
Investigaciones independientes indican que la memoria transaccional de Haswell probablemente sea un sistema de actualización diferida que utiliza cachés por núcleo para datos transaccionales y puntos de control de registros. [17] En otras palabras, es más probable que Haswell utilice el sistema de memoria transaccional basado en caché, ya que es una opción de implementación mucho menos riesgosa. Por otro lado, Skylake o posterior de Intel puede combinar este enfoque basado en caché con un búfer de ordenamiento de memoria (MOB) para el mismo propósito, posiblemente proporcionando también memoria transaccional multiversionada que sea más susceptible al multithreading especulativo . [22]
En agosto de 2014, Intel anunció que existía un error en la implementación de TSX/TSX-NI en las CPU Haswell, Haswell-E, Haswell-EP y las primeras Broadwell, lo que provocó la desactivación de la función TSX/TSX-NI en las CPU afectadas a través de una actualización de microcódigo. [9] [10] [23] El error se corrigió en las versiones F-0 de la CPU Broadwell Core M-5Y70 habilitada para vPro en noviembre de 2014. [24]
El error fue encontrado y luego reportado durante una tesis de diploma en la Escuela de Ingeniería Eléctrica y Computación de la Universidad Técnica Nacional de Atenas . [25]
En octubre de 2018, Intel reveló un problema de ordenamiento de memoria TSX/TSX-NI encontrado en algunos procesadores Skylake . [26] Como resultado de una actualización de microcódigo, la compatibilidad con HLE se deshabilitó en las CPU afectadas y RTM se mitigó sacrificando un contador de rendimiento cuando se usaba fuera del modo Intel SGX o el modo de administración del sistema ( SMM ). El software del sistema tendría que deshabilitar efectivamente RTM o actualizar las herramientas de monitoreo de rendimiento para no usar el contador de rendimiento afectado.
En junio de 2021, Intel publicó una actualización de microcódigo que deshabilita aún más TSX/TSX-NI en varios modelos de procesadores Xeon y Core desde Skylake hasta Coffee Lake y Whiskey Lake como mitigación de la vulnerabilidad TSX Asynchronous Abort (TAA). Se eliminó la mitigación anterior para el problema de ordenamiento de la memoria. [27] De forma predeterminada, con el microcódigo actualizado, el procesador seguiría indicando compatibilidad con RTM, pero siempre abortaría la transacción. El software del sistema puede detectar este modo de operación y enmascarar la compatibilidad con TSX/TSX-NI de la CPUID
instrucción, lo que evita que las aplicaciones detecten TSX/TSX-NI. El software del sistema también puede habilitar el "Modo de desarrollo de software no compatible", donde RTM está completamente activo, pero en este caso el uso de RTM puede estar sujeto a los problemas descritos anteriormente y, por lo tanto, este modo no debe habilitarse en los sistemas de producción. En algunos sistemas, RTM no se puede volver a habilitar cuando SGX está activo. HLE siempre está deshabilitado.
Según el Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 de mayo de 2020, volumen 1, capítulo 2.5 Arquitectura y características del conjunto de instrucciones de Intel eliminadas, [18] HLE se ha eliminado de los productos Intel lanzados en 2019 y posteriores. RTM no está documentado como eliminado. Sin embargo, los procesadores cliente Intel Comet Lake e Ice Lake de décima generación , que se lanzaron en 2020, no admiten TSX/TSX-NI, [28] [29] [30] [31] [32] incluidos HLE y RTM. Las versiones de ingeniería de los procesadores Comet Lake aún conservaban la compatibilidad con TSX/TSX-NI.
En la revisión 41 de la Referencia de programación de extensiones del conjunto de instrucciones de la arquitectura Intel de octubre de 2020, [33] se documentó una nueva extensión del conjunto de instrucciones TSXLDTRK. Se incluyó por primera vez en los procesadores Sapphire Rapids lanzados en enero de 2023.
Bajo un conjunto complejo de condiciones de temporización internas y eventos del sistema, el software que utiliza las instrucciones Intel TSX/TSX-NI (Transactional Synchronization Extensions) puede observar un comportamiento impredecible del sistema.
El procesador rastrea tanto las direcciones de lectura como las direcciones de escritura en la caché de datos de primer nivel (caché L1) del procesador.
Todo el asunto de "la CPU realiza los bloqueos de grano fino" se basa en el etiquetado de las líneas de caché L1 (64 B) y hay 512 de ellas para ser específicos (64 x 512 = 32 KB). Solo hay una "etiqueta de bloqueo" por línea de caché.
BDM53
1
E-0: X, F-0:, Estado: Corregido ERRATA: Instrucciones Intel TSX no disponibles. 1. Se aplica al procesador Intel Core M-5Y70. Intel TSX es compatible con el procesador Intel Core M-5Y70 con tecnología Intel vPro. Intel TSX no es compatible con otros SKU de procesadores.
La actualización del microcódigo de octubre de 2018 también deshabilitó el prefijo de instrucción HLE de Intel TSX y obligó a que todas las transacciones RTM se cancelaran cuando se operaba en modo Intel SGX o en modo de administración del sistema (SMM).