La ABI x32 es una interfaz binaria de aplicación (ABI) y una de las interfaces del kernel de Linux . Permite a los programas aprovechar 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 de llamada al sistema más rápida ) mientras se usa 32 -bit punteros y evitando así la sobrecarga de los punteros de 64 bits. [1] [2] [3]
Detalles
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 colocar más código y más datos en la caché . [1] [2] [3] Los mejores resultados durante las pruebas se obtuvieron con el banco de pruebas SPEC CPU 2000 de 181.mcf , en el que la versión x32 ABI era 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 las pruebas comparativas de enteros de CPU SPEC en comparación con x86-64. No hay ninguna ventaja de velocidad sobre x86-64 en los puntos de referencia de punto flotante de la CPU SPEC. [5]
Característica | i386 ABI | x32 ABI | x86-64 ABI |
---|---|---|---|
Punteros | 4 bytes | 8 bytes | |
Max. memoria por proceso | 4 GiB | 128 TiB | |
Registros enteros | 6 (PIC) | 15 | |
Registros FP | 8 | dieciséis | |
Aritmética de 64 bits | No | sí | |
Aritmética de coma flotante | x87 | SSE | |
Convención de llamadas | Memoria | Registros | |
Prólogo de PIC | 2-3 instrucciones | Ninguno |
Historia
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 infrecuente, 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 de 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 , [6] tal como se ha mostrado para x86-64. En ese sentido, el x32 ABI extiende el concepto ILP32-on-64bit a la plataforma x86-64.
Varias personas habían discutido los beneficios de un ABI x86-64 con punteros de 32 bits en los años desde el lanzamiento del Athlon 64 en 2003, en particular Donald Knuth en 2008. [7] Hubo poco progreso visible públicamente hacia la implementación de tal 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. [8]
Ese mismo día, Linus Torvalds respondió con preocupación de que el uso de valores de tiempo de 32 bits en el ABI x32 podría causar problemas en el futuro. [9] [10] 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 . [9] [10] A raíz de esta solicitud, los desarrolladores de x32 ABI cambiaron los valores de tiempo a 64 bits. [11]
Una presentación en la Linux Plumbers Conference el 7 de septiembre de 2011, cubrió el x32 ABI. [2]
La ABI x32 se fusionó con el kernel de Linux para la versión 3.4 y se agregó soporte a la Biblioteca GNU C en la versión 2.16. [12]
En diciembre de 2018 se consideró desaprobar el ABI x32, lo que no sucedió en noviembre de 2020. [13]
Referencias
- ↑ a b Thorsten Leemhuis (13 de septiembre de 2011). "Kernel Log: x32 ABI soluciona los inconvenientes de 64 bits" . www.h-online.com. Archivado desde el original el 28 de octubre de 2011 . Consultado el 1 de noviembre de 2011 .
- ^ a b c "x32: una ABI nativa de 32 bits para x86-64" . linuxplumbersconf.org . Consultado el 12 de junio de 2012 .
- ^ a b c "x32-abi" . Sitios de Google . Consultado el 1 de noviembre de 2011 .
- ^ "Archivo de descripción de referencia de 181.mcf SPEC CPU2000" . Corporación de Evaluación de Desempeño Estándar. 1999-10-14 . Consultado el 1 de noviembre de 2011 .
- ^ HJ Lu; H. Peter Anvin; Milind Girkar (septiembre de 2011). "X32: una ABI nativa de 32 bits para X86-64" .
- ^ Tony Bourke (22 de enero de 2004). "¿Los binarios de 64 bits son realmente más lentos que los binarios de 32 bits?" . Consultado el 25 de marzo de 2014 .
- ^ Donald Knuth (febrero de 2008). "Noticias recientes: una llama sobre punteros de 64 bits" . Consultado el 15 de mayo de 2012 .
- ^ H. Peter Anvin (27 de agosto de 2011). "RFD: números de llamada del sistema x32 ABI" . Consultado el 15 de mayo de 2012 .
- ^ a b Jonathan Corbet (29 de agosto de 2011). "El sistema x32 llama a ABI" . LWN.net . Consultado el 1 de noviembre de 2011 .
- ^ a b Linus Torvalds (26 de agosto de 2011). "Re: RFD: x32 números de llamada del sistema ABI" . LWN.net . Consultado el 26 de febrero de 2016 .
- ^ Lu, HJ (24 de noviembre de 2011). "Actualización del estado del proyecto X32" . libc-alpha (lista de correo) . Consultado el 17 de octubre de 2019 .
- ^ O'Donell, Carlos (30 de junio de 2012). "La versión 2.16 de la biblioteca GNU C ya está disponible" . libc-alpha (lista de correo) . Consultado el 27 de diciembre de 2016 .
- ^ "¿Podemos eliminar la compatibilidad con versiones anteriores de Linux x32?" . LKML . Consultado el 13 de marzo de 2019 .
enlaces externos
- Sitio web de desarrollo de x32 ABI
- Diapositivas de presentación de x32 ABI de la Conferencia de fontaneros de Linux