x32 (ABI)

Binärschnittstelle des Linux-Kernels

x32 ist eine Binärschnittstelle (ABI) des Linux-Kernels ab Version 3.4, die auf der x64-Architektur basiert, aber 32 Bit breite Zeiger verwendet. Dadurch ist es möglich, die 64-Bit-Erweiterungen der x86-Architektur (x64 bzw. x86 im 64-Bit-Betriebsmodus), wie zum Beispiel den IP-relativen Addressierungsmodus für effizienten PIC zu nutzen, gleichzeitig ist der Speicherverbrauch durch die kürzeren Zeiger aber geringer. Außerdem ist der Datentyp long 32 Bit groß, das Datenmodell ist daher – wie im 32-Bit-Modus – ILP32. Daher können Programme, die zwischen 32-Bit-, 64-Bit- und x32-Modus unterscheiden müssen, den x32-Modus wie folgt erkennen:

#if defined( __x86_64__ ) && defined( __ILP32__ )
 // x32-spezifischer Code
#endif

Die x32-ABI verwendet die gleichen Systemaufrufe wie die x64-ABI. Für Systemaufrufe, bei denen die Zeigerlänge einen Unterschied ausmacht, wird eine andere Nummer verwendet.

Vergleich der Binärschnittstellen (ABIs)
Feature Architektur/ABI
i386 x86_64
x32-Prozess nativ (64-Bit)
Maximalgröße des physischen Arbeitsspeichers 64 GiB mit PAE 128 TiB
Maximal adressierbarer Arbeitsspeicher pro Prozess 4 GiB 128 TiB
Anzahl der Integer-Register 6 (PIC) 16
Anzahl der Gleitkomma-Register 8 16
Größe von Zeiger-Datentypen 32 bit 64 bit
Größe von Unixzeit-Datentypen 32 bit 64 bit
Rechnen mit 64-Bit-Registern Nein Ja
Gleitkommazahlen x87 SSE
Aufrufkonvention Arbeitsspeicher Register
PIC-Prolog 2-3 insn Keiner

Im Vergleich zu nativem IA-32 (32-Bit-x86 des i386) stehen im x32-Modus die doppelt so vielen Register der x64-Architektur (siehe Registererweiterung) zur Verfügung, sodass der 32-Bit-Betrieb mit x32 immer schneller sein sollte als natives 32-Bit-x86 im Protected Mode seit dem 80386. Es gibt jedoch auch Einzelfälle, in denen x32 geringfügig langsamer ist.[1]

Im direkten Vergleich zu 64-Bit-x86 „x64“ ist die Verwendung von 32-Bit-Zeigern zwar auf 4 GB Arbeitsspeicher pro Prozess limitiert, geht jedoch mit reduziertem Speicherverbrauch einher und führt in einigen Fällen, abhängig vom jeweiligen Programm und den Daten, zusätzlich zu einer Performance-Steigerung. Obwohl die Nutzung eines 32-Bit-Modus innerhalb des modernisierten x64-Betriebsmodus der x86-Architektur auch langsamer sein kann, ist es meistens mindestens gleichauf mit dem nativen 64-Bit-Modus und kann manchmal sogar bis zu 30 % schneller sein.[2][1][3][4]

Bearbeiten

Einzelnachweise

Bearbeiten
  1. a b Michael Larabel: x32 Support For Linux Kernel Called In For Review. (Newsticker) Phoronix, 20. Februar 2012, abgerufen am 1. April 2021 (englisch): „Benchmarks by the developers have shown that x32 can be about up to 32% faster than x86_64 in some CPU benchmarks. However, in some cases it can also be slightly slower than x86_64 and/or ia32.“
  2. Nathalie Rauschmayr, Achim Streit: Evaluation of x32-ABI in the Context of LHC Applications. 2013, abgerufen am 1. April 2021 (englisch, aus Procedia Computer Science, Volume 18, 2013, Seiten 2233-2240): „This paper shows that in most of the applications, used at CERN, the memory overhead can be reduced between 3% and 35% and the corresponding difference in CPU-time can be improved up to 30%.“
  3. Michael Larabel: LLVM/Clang Gains x32 psABI Support. (Newsticker) Phoronix, 6. Juni 2012, abgerufen am 1. April 2021 (englisch).
  4. Applications that Profit from the Underrated x32-ABI. 19. April 2023, abgerufen am 20. April 2023 (englisch).