x32 ABIはアプリケーションバイナリインターフェース(ABI)であり、 Linux カーネルのインターフェースの 1 つです。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]
歴史
ILP32モードでコンパイルされたプログラムが大部分を占め、64 ビット CPU 命令への主要なアクセスも持つユーザー空間を実行することは、特に「クラシック RISC」チップの分野では珍しいことではありません。たとえば、Solarisオペレーティング システムはSPARCと x86-64 の両方でこれを行います。Linux側では、Debianも ILP32 ユーザー空間を出荷しています。根本的な理由は、 LP64コードのやや「より高価」な性質であり、[8] x86-64 の場合と同様に示されています。その点で、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リリースに統合され、バージョン2.16でGNU Cライブラリにサポートが追加されました。 [14]
2018年12月にはx32 ABIを廃止するかどうかの議論があったが、2023年4月時点で廃止は行われていない。 [15] 2024年5月時点でも廃止は行われておらず、さらに新たな開発も行われている。[16]
採択
参考文献
- ^ ab Thorsten Leemhuis (2011-09-13). 「Kernel Log: x32 ABI が 64 ビットの欠点を回避」 www.h-online.com. 2011 年 10 月 28 日時点のオリジナルよりアーカイブ。2011年 11 月 1 日に閲覧。
- ^ abc 「x32 - x86-64 用のネイティブ 32 ビット ABI」。linuxplumbersconf.org。2012年 6 月 12 日閲覧。
- ^ abc "x32-abi". Google Sites . 2011年11月1日閲覧。
- ^ 「181.mcf SPEC CPU2000 ベンチマーク記述ファイル」。Standard Performance Evaluation Corporation。1999 年 10 月 14 日。2011年 11 月 1 日閲覧。
- ^ HJ Lu; H. ピーター・アンビン;ミリンド・ギルカール (2011 年 9 月)。 「X32 - X86-64 のネイティブ 32 ビット ABI」。
- ^ Rauschmayr, Nathalie; Streit, Achim (2013). 「LHC アプリケーションのコンテキストにおける x32-ABI の評価」Procedia Computer Science . 18 : 2233–2240. doi : 10.1016/j.procs.2013.05.394 .
- ^ 「過小評価されている x32-ABI から利益を得るアプリケーション」www.sempria.de 。 2023 年5 月 22 日閲覧。
- ^ Tony Bourke (2004-01-22). 「64 ビット バイナリは本当に 32 ビット バイナリより遅いのか?」。2014 年 3 月 25 日閲覧。
- ^ Donald Knuth (2008 年 2 月). 「最近のニュース: 64 ビット ポインタに関する炎上」。2008 年 11 月 4 日時点のオリジナルよりアーカイブ。2012年5 月 15 日閲覧。
- ^ H. Peter Anvin (2011年8月27日). 「RFD: x32 ABI システムコール番号」 . 2012年5月15日閲覧。
- ^ ab Jonathan Corbet (2011-08-29). 「x32 システム コール ABI」. LWN.net . 2011-11-01に閲覧。
- ^ ab Linus Torvalds (2011-08-26). 「Re: RFD: x32 ABI システムコール番号」 LWN.net . 2016年2月26日閲覧。
- ^ Lu, HJ (2011-11-24). 「X32 プロジェクトのステータス更新」. libc-alpha (メーリングリスト) . 2019-10-17閲覧。
- ^ O'Donell, Carlos (2012 年 6 月 30 日). 「GNU C ライブラリ バージョン 2.16 が利用可能になりました」. libc-alpha (メーリング リスト) . 2016 年12 月 27 日閲覧。
- ^ 「アップストリーム Linux x32 サポートを廃止できますか?」LKML . 2019 年3 月 13 日閲覧。
- ^ 「6.10 マージウィンドウの前半」LWN 。2024 年5 月 17 日閲覧。
外部リンク
- x32 ABI 開発ウェブサイト
- Linux Plumbers カンファレンスの x32 ABI プレゼンテーション スライド
