x32 ABIはアプリケーションバイナリインターフェース(ABI)であり、 Linuxカーネルのインターフェースの一つです。x32 ABIは、IntelおよびAMDの64ビットハードウェア上で32ビット整数、long、ポインタ(ILP32 )を提供します。このABIにより、プログラムはx86-64命令セットの利点( CPUレジスタ数の増加、浮動小数点演算性能の向上、位置独立コードの高速化、共有ライブラリ、レジスタ経由の関数パラメータの受け渡し、システムコール命令の高速化)を活用しながら、32ビットポインタを使用することで64ビットポインタのオーバーヘッドを回避できます。[ 1 ] [ 2 ] [ 3 ]
x32 ABI はプログラムを4 GiB の仮想アドレス空間に制限しますが、ポインタを小さくすることでプログラムのメモリフットプリントも削減します。これにより、キャッシュに多くのコードとデータを収めることができ、実行速度を向上させることができます。[ 1 ] [ 2 ] [ 3 ]テスト中に最も良い結果が得られたのは 181.mcf SPEC CPU 2000 ベンチマークで、x32 ABI バージョンは x86-64 バージョンよりも 40% 高速でした。[ 3 ] [ 4 ]平均して、x32 は SPEC CPU 整数ベンチマークで x86-64 よりも 5~8% 高速です。SPEC CPU 浮動小数点ベンチマークでは x86-64 に対して速度上の優位性はありません。[ 5 ]また、x32 ABI の利点を示すアプリケーション ベンチマークもいくつかあります。[ 6 ] [ 7 ]
| 特徴 | i386 ABI | x32 ABI | x86-64 ABI |
|---|---|---|---|
| ポインタ | 4バイト | 8バイト | |
| プロセスあたりの最大メモリ | 4ギガバイト | 128 TiB | |
| 整数レジスタ | 6 (写真) | 15 | |
| FPレジスタ | 8 | 16 | |
| 64ビット演算 | いいえ | はい | |
| 浮動小数点演算 | x87 | 南南東 | |
| 呼び出し規約 | メモリ | レジスター | |
| PICプロローグ | 2~3の指示 | なし | |
ILP32モードでコンパイルされたプログラムが大部分を占め、64ビットCPU命令への主要なアクセスも持つユーザー空間を実行することは、特に「古典的なRISC」チップの分野では珍しいことではありません。例えば、SolarisオペレーティングシステムはSPARCとx86-64の両方でこれを実現しています。Linux側では、DebianもILP32ユーザー空間を提供しています。その根本的な理由は、 LP64コードがx86-64の場合と同様に、やや「高価」であることです[ 8 ]。この点において、x32 ABIはILP32-on-64ビットの概念をx86-64プラットフォームに拡張しています。
2003年にAthlon 64が発売されて以来、多くの人が32ビットポインターを備えたx86-64 ABIの利点について議論してきましたが、特に2008年にはDonald Knuthが議論しました。 [ 9 ] 2011年8月27日にHans Peter AnvinがLinuxカーネルのメーリングリストでHJ Luと共にx32 ABIに取り組んでいることを発表しましたが、その時まで、このようなモードの実装に向けた目立った進展はほとんどありませんでした。[ 10 ]
同日、リーナス・トーバルズは、 x32 ABIで32ビットの時間値を使用すると将来的に問題が発生する可能性があるという懸念を表明した。[ 11 ] [ 12 ]これは、32ビットの時間値を使用すると、2038年に時間値がオーバーフローする可能性があるためである。[ 11 ] [ 12 ]この要請を受けて、x32 ABIの開発者は時間値を64ビットに変更した。[ 13 ]
2011年9月7日に開催されたLinux Plumbers Conferenceでのプレゼンテーションでは、x32 ABIについて説明されました。[ 2 ]
x32 ABIはLinuxカーネル3.4リリースに統合され、GNU Cライブラリバージョン2.16でサポートが追加された。[ 14 ]
2018年12月にはx32 ABIを廃止するかどうかの議論がありましたが、2023年4月時点で廃止は行われておらず、[ 15 ] 2024年5月には新たな展開が見られました。[ 16 ]
| Linuxディストリビューション | 詳細情報 |
|---|---|
| デビアン | X32 ポート |
| ジェンツー | abi_x86_x32use-flags によるマルチライブラリ |
| ヨクトプロジェクト | X32 ABI |
| T2 SDE | x86-64 2021年10月22日アーカイブWayback Machine |