La ABI x32 es una interfaz binaria de aplicación (ABI) y una de las interfaces del núcleo Linux . La ABI x32 proporciona enteros de 32 bits, punteros largos y punteros ( ILP32 ) en hardware Intel y AMD de 64 bits. La ABI permite que los programas aprovechen los beneficios del conjunto de instrucciones x86-64 (mayor número de registros de CPU , mejor rendimiento de punto flotante, código independiente de la posición más rápido , bibliotecas compartidas , parámetros de función pasados a través de registros, instrucción syscall más rápida) mientras utilizan punteros de 32 bits y, por lo tanto, evitan la sobrecarga de los punteros de 64 bits. [1] [2] [3]
Aunque la ABI x32 limita el programa a un espacio de direcciones virtuales de 4 GiB, también disminuye la huella de memoria del programa al hacer que los punteros sean más pequeños. Esto puede permitir que se ejecute más rápido al incluir más código y más datos en la caché . [1] [2] [3] Los mejores resultados durante las pruebas se obtuvieron con el benchmark SPEC CPU 2000 de 181.mcf, en el que la versión ABI x32 fue un 40 % más rápida que la versión x86-64. [3] [4] En promedio, x32 es un 5-8 % más rápido en los benchmarks de números enteros de SPEC CPU en comparación con x86-64. No hay ninguna ventaja de velocidad sobre x86-64 en los benchmarks de punto flotante de SPEC CPU. [5] También hay algunos benchmarks de aplicaciones que demuestran las ventajas de la ABI x32. [6] [7]
La ejecución de un espacio de usuario que consta principalmente de programas compilados en modo ILP32 y que también tienen acceso principal a instrucciones de CPU de 64 bits no ha sido algo poco común, especialmente en el campo de los chips "RISC clásicos". Por ejemplo, el sistema operativo Solaris lo hace tanto para SPARC como para x86-64. En el lado Linux , Debian también incluye un espacio de usuario ILP32. La razón subyacente es la naturaleza algo "más cara" del código LP64 , [8] tal como se ha demostrado para x86-64. En ese sentido, la ABI x32 extiende el concepto de ILP32 en 64 bits a la plataforma x86-64.
Varias personas habían discutido los beneficios de una ABI x86-64 con punteros de 32 bits en los años desde el lanzamiento de Athlon 64 en 2003, en particular Donald Knuth en 2008. [9] Hubo poco progreso visible públicamente hacia la implementación de dicho modo hasta el 27 de agosto de 2011, cuando Hans Peter Anvin anunció a la lista de correo del kernel de Linux que él y HJ Lu habían estado trabajando en la ABI x32. [10]
Ese mismo día, Linus Torvalds respondió con la preocupación de que el uso de valores de tiempo de 32 bits en la ABI x32 podría causar problemas en el futuro. [11] [12] Esto se debe a que el uso de valores de tiempo de 32 bits haría que los valores de tiempo se desbordaran en el año 2038. [ 11] [12] A raíz de esta solicitud, los desarrolladores de la ABI x32 cambiaron los valores de tiempo a 64 bits. [13]
Una presentación en la Conferencia Linux Plumbers el 7 de septiembre de 2011 cubrió la ABI x32. [2]
La ABI x32 se fusionó con el kernel de Linux para la versión 3.4 y se agregó soporte para la biblioteca GNU C en la versión 2.16. [14]
En diciembre de 2018 se debatió si se debía descontinuar la ABI x32, lo que no ha sucedido hasta abril de 2023. [15] Tampoco ha sucedido hasta mayo de 2024, e incluso más, recibió algunos nuevos desarrollos. [16]