HeadlinesBriefing favicon HeadlinesBriefing.com

La Plaga de la Emulación x86 en ARM

Hacker News •
×

Bienvenido al primer artículo de características en nuestro sitio. Vamos a cubrir un problema continuo con la emulación de x86 que afecta a todas las aplicaciones que emulamos. Esto se reduce a un solo término transversal que tiene repercusiones amplias; Emular el modelo de memoria de ordenación total de almacenamiento x86 (x86-TSO). Los problemas con emular este modelo de memoria en el modelo de memoria de ordenación débil que ARM define son multifacéticos y abarcan múltiples problemas. Vamos a repasar todos los problemas que podemos encontrar y las formas en que resolvemos (o en algunos casos no podemos resolver) en este artículo.

¿Qué es exactamente x86-TSO? Un modelo de memoria es un conjunto de reglas sobre cómo se comportan las operaciones de memoria en un sistema en relación entre sí. Las reglas dictan cómo interactúan las cargas y tiendas en un entorno de un solo hilo o multihilo. Los dos que nos importan hoy son el modelo de consistencia relajada (o débil) de ARM, y la variante x86 del modelo de consistencia de ordenación total de almacenamiento. Estos dos modelos son básicamente los dos extremos del espectro; donde ARM es el más relajado, permitiendo optimizaciones de hardware significativas; y x86 es el más estricto, imponiendo un modelo de coherencia muy fuerte.

Con TSO siendo muy estricto, el programador puede asumir que cuando ocurre una operación de almacenamiento de memoria, será visible de manera coherente para todos los demás procesadores. El modelo de memoria débil que ARM tiene no es tan intuitivo. Por defecto, las operaciones normales de carga y almacenamiento de memoria no son estrictamente coherentes entre procesadores, lo que permite que la CPU opere de manera más eficiente. ARM introdujo instrucciones de memoria load-acquire y store-release para abordar la consistencia, mapeadas a memory_order_acquire y memory_order_release de C++ std::atomic.