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
fxrstor64sobre 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 ardtscen vuelo interfiriendo entre sí. - Se contrastan brevemente los roles de
rdtsc/rdtscpcomo 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.