Assembly Hall of Shame

Un proyecto de código abierto que cataloga las instrucciones x86 más lentas pone de relieve cómo ciertos patrones —como accesos MMIO y operaciones de coma flotante subnormales— pueden bloquear CPUs modernas durante milisegundos o incluso segundos. Los comentaristas conectan esto con preocupaciones más amplias sobre el rendimiento del software y la latencia, señalando cómo las capas de abstracción, las canalizaciones de entrada del SO y las tasas de refresco de la pantalla pueden hacer que las máquinas actuales se sientan menos reactivas que hardware mucho más antiguo pese a un rendimiento muy superior. El trabajo se ve tanto como una inmersión lúdica en el comportamiento de la CPU como un recurso práctico para entender trampas de rendimiento e incluso posibles implicaciones de seguridad, como abusar de instrucciones de larga duración para interferir con interrupciones de gestión del sistema.

Proyecto y herramientas relacionadas

  • Repositorio visto como un catálogo divertido pero serio de instrucciones y patrones patológicos de x86.
  • Vinculado a un cuerpo de trabajo más amplio: fuerza bruta del espacio de opcodes para instrucciones no documentadas, compiladores “solo mov”, arte de flujo de control en desensamblado, herramientas de visualización binaria y demos que rompen SMI.
  • Algunos preguntan si descubre trampas prácticas frente a ser principalmente por diversión; otros señalan motivaciones explícitas de seguridad y fiabilidad.

Instrucciones lentas, MMIO y arquitectura

  • Muchas secuencias de peor caso dependen de operaciones de coma flotante subnormales e interacciones MMIO, especialmente a través de PCIe y puertos de E/S ACPI.
  • Una destacada es fxrstor64 sobre MMIO, aparentemente capaz de bloquear la ruta PCIe durante decenas de segundos; la discusión señala la falta de garantías de progreso.
  • Algunos sienten que los trucos basados en MMIO son “hacer trampa” y prefieren resultados restringidos a la memoria principal; se menciona uops.info para tiempos de instrucciones más “puros”.

Latencia, rendimiento y UX

  • Debate sobre cuántas instrucciones caben en 1 ms y por qué los sistemas modernos siguen sintiéndose lentos.
  • Se citan umbrales clásicos de tiempo de respuesta (0,1 s “instantáneo”, 1 s flujo, 10 s atención), pero otros señalan que los humanos pueden detectar diferencias mucho menores (decenas de ms o menos, según el contexto).
  • Se discuten detalles de la canalización de entrada (sondeo USB, refresco del monitor, capas del SO); a veces los sistemas antiguos tienen una latencia de entrada a pantalla notablemente menor que las pilas modernas.
  • Se enfatiza la distinción entre optimizaciones de rendimiento (agrupación por lotes) y latencia, con diseños modernos que a menudo favorecen lo primero.

Inflación de software y regresiones

  • Se invocan leyes sobre cómo el software se infla para consumir las ganancias de hardware.
  • Quejas sobre cómo el Notepad/MSPaint modernos cambian comportamientos establecidos desde hace mucho y rompen la memoria muscular; algunos usuarios evitan versiones nuevas de Windows por esta razón.

Semántica de NOP y pedantería microarquitectónica

  • Debate prolongado sobre si nop “no hace nada” versus “incrementa el puntero de instrucción”, y cómo eso interactúa con la decodificación y la implementación microarquitectónica.
  • La discusión toca codificaciones heredadas (XCHG AX,AX), NOP reservados y detalles del manejo especulativo de RIP.

Instrucciones de temporización y peculiaridades de medición

  • Se discute el coste de rdtsc; un comentarista señala ~25 ciclos en ciertas microarquitecturas, mientras que el coste mayor informado por el repositorio probablemente refleja muchas llamadas a rdtsc en vuelo interfiriendo entre sí.
  • Se contrastan brevemente los roles de rdtsc/rdtscp como barreras de temporización e instrucciones de ordenamiento.

Trucos de bajo nivel y casos límite

  • Se plantean ideas sobre usar fallos de TLB, scatter/gather e incluso el comportamiento de tablas de páginas / MMU para crear operaciones arbitrariamente largas o en bucle.
  • PCIe se describe como una red de paquetes; se señala que latencias extremas mediante puentes exóticos son teóricamente posibles.