COMPUTING

¿Qué es la ejecución especulativa? – ExtremeTech

Con una falla de seguridad potencial centrada en AMD en las noticias, es un buen momento para volver a examinar la cuestión de qué es la ejecución especulativa y cómo funciona. Este tema recibió mucha discusión hace unos años, cuando Spectre y Meltdown aparecían con frecuencia en las noticias y aparecían nuevos ataques de canal lateral cada pocos meses.

La ejecución especulativa es una técnica que se utiliza para aumentar el rendimiento de todos los microprocesadores modernos en un grado u otro, incluidos los chips construidos o diseñados por AMD, ARM, IBM e Intel. Los núcleos de CPU modernos que no utilizan ejecución especulativa están diseñados para entornos de energía ultrabaja o tareas de procesamiento mínimas. Varias fallas de seguridad como Spectre, Meltdown, Foreshadow y MDS se dirigieron a la ejecución especulativa hace unos años, generalmente en las CPU de Intel.

¿Qué es la ejecución especulativa?

La ejecución especulativa es uno de los tres componentes de ejecución fuera de orden, también conocido como ejecución dinámica. Junto con la predicción de múltiples ramas (que se usa para predecir las instrucciones que con mayor probabilidad se necesitarán en un futuro cercano) y el análisis del flujo de datos (que se usa para alinear las instrucciones para una ejecución óptima, en lugar de ejecutarlas en el orden en que llegaron), la ejecución especulativa entregó un mejora espectacular del rendimiento con respecto a los procesadores Intel anteriores cuando se introdujeron por primera vez a mediados de la década de 1990. Debido a que estas técnicas funcionaron tan bien, AMD las adoptó rápidamente, que utilizó un procesamiento fuera de orden a partir del K5.

El enfoque de ARM en los procesadores móviles de baja potencia inicialmente lo mantuvo fuera del campo de juego OOoE, pero la compañía adoptó una ejecución fuera de orden cuando construyó el Cortex A9 y ha continuado expandiendo su uso de la técnica con Cortex posterior y más poderoso. CPU de marca.

Así es como funciona. Las CPU modernas están todas en canalización, lo que significa que son capaces de ejecutar varias instrucciones en paralelo, como se muestra en el diagrama a continuación.

Pipeline-Wikipedia

Imagen de Wikipedia. Este es un diagrama general de una CPU canalizada, que muestra cómo las instrucciones se mueven a través del procesador de un ciclo de reloj a otro.

Imagina que el bloque verde representa una rama si-entonces-si no. El predictor de rama calcula qué rama es más probable que se tome, obtiene el siguiente conjunto de instrucciones asociadas con esa rama y comienza a ejecutarlas especulativamente antes de saber cuál de las dos ramas de código utilizará. En el diagrama de arriba, estas instrucciones especulativas se representan como el cuadro violeta. Si el predictor de bifurcaciones adivinó correctamente, entonces el siguiente conjunto de instrucciones que la CPU necesitaba está alineado y listo para funcionar, sin bloqueo de la tubería ni demora de ejecución.

Sin la predicción de rama y la ejecución especulativa, la CPU no sabe qué rama tomará hasta que la primera instrucción en la tubería (el cuadro verde) termine de ejecutarse y se mueva a la Etapa 4. En lugar de pasar directamente de un conjunto de instrucciones a la a continuación, la CPU tiene que esperar a que lleguen las instrucciones adecuadas. Esto perjudica el rendimiento del sistema, ya que es hora de que la CPU pueda realizar un trabajo útil.

La razón por la que es una ejecución “especulativa” es que la CPU podría estar equivocada. Si es así, el sistema carga los datos apropiados y ejecuta esas instrucciones en su lugar. Pero los predictores de rama no se equivocan muy a menudo; las tasas de precisión suelen estar por encima del 95%.

¿Por qué utilizar la ejecución especulativa?

Hace décadas, antes de que se inventara la ejecución fuera de orden, las CPU eran lo que hoy llamamos diseños “en orden”. Instrucciones ejecutadas en el orden en que fueron recibidas, sin intentar reordenarlas o ejecutarlas de manera más eficiente. Uno de los principales problemas con la ejecución en orden es que un bloqueo de la tubería detiene toda la CPU hasta que se resuelve el problema.

El otro problema que impulsó el desarrollo de la ejecución especulativa fue la brecha entre la CPU y las velocidades de la memoria principal. El siguiente gráfico muestra la brecha entre la CPU y los relojes de la memoria. A medida que crecía la brecha, también crecía la cantidad de tiempo que la CPU pasaba esperando en la memoria principal para entregar información. Las características como las cachés L1, L2 y L3 y la ejecución especulativa se diseñaron para mantener la CPU ocupada y minimizar el tiempo que pasaba inactivo.

mem_gap

Si la memoria pudiera igualar el rendimiento de la CPU, no habría necesidad de cachés.

Funcionó. La combinación de grandes cachés fuera de matriz y ejecución fuera de orden dio a Pentium Pro y Pentium II de Intel oportunidades para estirar las piernas de una manera que los chips anteriores no podían igualar. Este gráfico de una Anandtech de 1997 artículo muestra la ventaja claramente.

cpuben6

Gracias a la combinación de ejecución especulativa y cachés grandes, el Pentium II 166 supera decisivamente a un Pentium 250 MMX, a pesar de que este último tiene una ventaja de velocidad de reloj de 1.51x sobre el primero.

En última instancia, fue el Pentium II el que entregó los beneficios de la ejecución fuera de orden a la mayoría de los consumidores. El Pentium II era un microprocesador rápido en relación con los sistemas Pentium que habían sido de gama alta poco antes. AMD era una opción de segundo nivel absolutamente capaz, pero hasta que se lanzó el Athlon original, Intel tenía un bloqueo en la corona de rendimiento absoluto.

El Pentium Pro y el Pentium II posterior eran mucho más rápidos que las arquitecturas anteriores que usaba Intel. Esto no estaba garantizado. Cuando Intel diseñó el Pentium Pro, gastó una cantidad significativa de su matriz y presupuesto de energía para permitir la ejecución fuera de orden. Pero la apuesta dio sus frutos, a lo grande.

Intel ha sido vulnerable a más ataques de canal lateral que llegaron al mercado en los últimos tres años que AMD o ARM porque optó por especular de manera más agresiva y terminó exponiendo ciertos tipos de datos en el proceso. Varias rondas de parches han reducido esas vulnerabilidades en chips anteriores y las CPU más nuevas están diseñadas con correcciones de seguridad para algunos de estos problemas en el hardware. También debe tenerse en cuenta que el riesgo de este tipo de ataques de canal lateral sigue siendo teórico. En los años transcurridos desde que salieron a la superficie, no se ha informado de ningún ataque con estos métodos.

Existen diferencias entre la forma en que Intel, AMD y ARM implementan la ejecución especulativa, y esas diferencias son parte de la razón por la que Intel está expuesta a algunos de estos ataques de una manera que los otros proveedores no lo están. Pero la ejecución especulativa, como técnica, es simplemente demasiado valiosa para dejar de usarla. En la actualidad, cada arquitectura de CPU de gama alta utiliza una ejecución fuera de orden. Y la ejecución especulativa, aunque se implementa de manera diferente de una compañía a otra, es utilizada por cada uno de ellos. Sin ejecución especulativa, la ejecución fuera de orden no funcionaría.

El estado de las vulnerabilidades de canal lateral en 2021

De 2018 a 2020, vimos una serie de vulnerabilidades de canal lateral discutidas, incluidas Spectre, Meltdown, Foreshadow, RIDL, MDS, ZombieLoad y otras. Se puso un poco de moda para los investigadores de seguridad emitir un informe serio, un nombre amigable con el mercado y ocasionales explosiones de relaciones públicas espeluznantes que levantaron el espectro (sin juego de palabras) de problemas de seguridad devastadores que, hasta la fecha, no han surgido.

Continúa la investigación del canal lateral: una nueva vulnerabilidad potencial se encontró en las CPU de Intel en marzo, pero parte de la razón por la que los ataques de canal lateral funcionan es porque La física nos permite fisgonear información utilizando canales que no están destinados a transmitirla. (Los ataques de canal lateral son ataques que se centran en las debilidades de la implementación para filtrar datos, en lugar de centrarse en un algoritmo específico para descifrarlos).

Aprendemos cosas sobre el espacio exterior de forma regular observándolo en espectros de energía que los humanos no pueden percibir naturalmente. Observamos la presencia de neutrinos utilizando detectores hundidos profundamente en lugares como el lago Baikal, precisamente porque las características de estos lugares nos ayudan a discernir la débil señal que estamos buscando del ruido del universo en su actividad. Mucho de lo que sabemos sobre geología, astronomía, sismología y cualquier campo donde la observación directa de los datos sea imposible o impracticable conceptualmente se relaciona con la idea de canales laterales “con fugas”. Los seres humanos son muy buenos para extraer datos midiendo indirectamente. Hay esfuerzos continuos para diseñar chips que dificulten las vulnerabilidades de canal lateral, pero será muy difícil bloquearlos por completo.

Esto no significa que estos problemas de seguridad no sean serios o que las empresas de CPU deban levantar las manos y negarse a solucionarlos porque el universo es inconveniente, pero es un juego gigante de whack-a-mole por ahora, y puede que sea así. No es posible proteger un chip contra todos estos ataques. A medida que se inventan nuevos métodos de seguridad, también pueden aparecer nuevos métodos de espionaje que se basan en otros canales laterales. Algunas correcciones, como deshabilitar Hyper-Threading, pueden mejorar la seguridad, pero conllevan importantes impactos de rendimiento en ciertas aplicaciones.

Afortunadamente, por ahora, todo este ir y venir es teórico. Intel ha sido la empresa más afectada por estas divulgaciones, pero ninguna de las divulgaciones de canal lateral que se han reducido desde Spectre y Meltdown se ha utilizado en un ataque público. AMD, de manera similar, no tiene conocimiento de ningún grupo u organización que tenga como objetivo Zen 3 su reciente divulgación. Problemas como el ransomware han empeorado en los últimos dos años, sin necesidad de ayuda de las vulnerabilidades de los canales laterales.

A largo plazo, esperamos que AMD, Intel y otros proveedores continúen solucionando estos problemas a medida que surjan, con una combinación de actualizaciones de hardware, software y firmware. Conceptualmente, los ataques de canal lateral como estos son extremadamente difíciles, si no imposibles, de prevenir. Se pueden mitigar o solucionar problemas específicos, pero la naturaleza de la ejecución especulativa significa que una cierta cantidad de datos se filtrará en circunstancias específicas. Puede que no sea posible prevenirlo sin perder mucho más rendimiento del que la mayoría de los usuarios querrían comerciar.

Consulte nuestra serie ExtremeTech Explains para obtener una cobertura más detallada de los temas tecnológicos más candentes de la actualidad.

Publicaciones relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar
Cerrar