最近 メールがリリースされました Linuxカーネルメーリングリストを通じて、このメールの主な目的は x32サブアーキテクチャの実装からコードを削除する (x86 IA-32と混同しないでください)。
これにより、32ビットメモリアドレス指定モデルを使用できます (ハイブリッドx86およびx86_64)x86ビットシステム。
x32アーキテクチャとは何ですか?
x32サブアーキテクチャはハイブリッドx86_64ABIであることに言及することが重要です。、32ビットシステムで64ビットメモリアドレス指定モデルを使用できるようにします(プロセッサは64ビットモードで動作しますが、32ビットポインタと算術演算を使用します)。
ABIX32 追加のレジスタやより高速な命令、PIC ABIなど、アプリケーションがx86_64アーキテクチャを最大限に活用できるようにします。
同時に、ABI X32は32ビットメモリポインタをサポートします。これにより、メモリが節約され、プロセッサキャッシュのより効率的な充填に貢献し、コード実行の全体的な速度にプラスの効果があります。
ABI X32の制限は、アプリケーションから4GBを超えるメモリを送信できないことです。
X32サポートは、3.4年2012月に形成されたXNUMXリリース以降、Linuxカーネルの一部となっています。
開発者は、このアーキテクチャの保守を継続するかどうかについて議論します
x32テクノロジーの削除を提案している開発者によると それは正当化されておらず、現代の産業用レイアウトでの実用的なアプリケーションも見つかりませんでした。
その上、そしてl x32コードは、システムコールを処理するための非常に物議を醸す方法を使用しています、システムコールの実装を処理した後、通常の操作を中断するリスクがあります。
Linus Torvaldsは、提出された議論がない場合、x32を削除することに同意すると述べた または、x32サブアーキテクチャが適用されているシステムが提示されていない場合。
ライナス 彼はまた、x32アーキテクチャの使用は明らかに極端なパフォーマンステストに限定されていると述べました■このサブアーキテクチャのサポートは、ディストリビューションと開発環境を維持する上で非常に面倒な作業に関連しているためです。
メール:
みなさん、こんにちは。
Linuxからx32サポートを削除するパッチを提出することを真剣に検討しています。 これに関するいくつかの問題があります:
- ユーザーがいることは完全には明らかではありません。 私の知る限り、GentooとDebianでサポートされています
- 呼び出しシステムの動作は非常に奇妙です。 x32のほとんどのシステムコールは、エントリポイントを使用して*ネイティブ*(つまり、COMPAT_SYSCALL_DEFINEではない)を介して入力します。これは意図的なものです。
たとえば、adjtimex()は、compat入力ではなくネイティブ入力を使用します。これは、x32 structtimexがx86_64レイアウトと一致するためです。 ただし、少数のシステムコールには個別のエントリポイントがあります。これらは512から始まるシステムコールです。
これらは、COMPAT_SYSCALL_DEFINEエントリポイントから入ります。
32の範囲に*ない* X512システムコールは、カーネルのシステムコール規則のすべての類似性に違反します。
syscallハンドラーでは、in_compat_syscall()はtrueを返しますが、COMPAT_SYSCALL_DEFINEエントリは呼び出されません。これは非常識であり、ユーザーがsyscall実装をリファクタリングするときに問題が発生するリスクがあります。
そして何よりも、誰もこれらのことを試みません。
ある時 x32をテストしたとき、Gentoo開発者の32人は、ABIxXNUMXに切り替えたときのパフォーマンスの向上は合成テストが示すほど大きくないと結論付けました。 ABI x32のメーカーから:
以前のx86アーキテクチャと比較した場合にのみ大幅な進歩が見られますが、現在のx86-64アーキテクチャと比較した場合、ゲインはごくわずかです(x32の作成者によるSPECテストでは、従来のABI x40_86と比較して最大64%の加速が示されました。 H.264コーデックを使用すると、15〜20%の加速が示されました)。