recientemente 一封电子邮件已发布 通过Linux内核邮件列表,此电子邮件的主要目的是 从x32子架构实现中删除代码 (不要与x86 IA-32混淆)。
这使您可以使用32位内存寻址模型 在x86 86位系统上(混合x64和x86_64)。
x32架构是什么?
重要的是要提到x32子体系结构是x86_64 ABI的混合体,它允许在32位系统上使用64位存储器寻址模型(处理器以64位模式运行,但使用32位指针和算术运算)。
艾比X32 允许应用程序充分利用x86_64架构的优势,例如附加寄存器和更快的指令PIC ABI。
同时,ABI X32支持32位内存指针,这可以节省内存,有助于更高效地填充处理器缓存,并对代码执行的整体速度产生积极影响。
ABI X32的局限性是无法从应用程序中引导超过4 GB的内存。
自32年3.4月成立以来,X2012支持一直是Linux内核XNUMX的一部分。
开发人员将辩论是否继续维护此体系结构
根据开发人员建议删除x32技术 它是没有道理的,也没有在现代工业布局中找到实际的应用。
而且l x32代码使用颇有争议的方法来处理系统调用,这会在处理系统调用实现后产生中断正常运行的风险。
莱纳斯·托瓦尔兹(Linus Torvalds)表示,如果不提交任何参数,他将同意删除x32 或未显示已应用x32子体系结构的系统。
莱纳斯 还指出,x32体系结构的使用显然仅限于极限性能测试之所以如此,是因为对该子体系结构的支持与维护发行版和开发环境方面的大量麻烦有关。
邮件:
大家好。
我正在认真考虑提交补丁程序以从Linux删除x32支持。 这是与此有关的一些问题:
- 尚不清楚它有用户。 据我所知,它在Gentoo和Debian上受支持
- 呼叫系统的工作方式非常奇怪。 x32上的大多数系统调用都通过其本机*(即不是COMPAT_SYSCALL_DEFINE)与入口点一起输入,这是有意的。
例如,adjtimex()使用本机输入,而不是compat输入,因为x32 struct timex与x86_64布局匹配。 但是少数系统调用具有单独的入口点-这些系统调用始于512。
这些通过COMPAT_SYSCALL_DEFINE入口点输入。
不在32范围内的X512 syscall违反了内核syscall约定的所有相似之处。
在syscall处理程序中,in_compat_syscall()返回true,但是没有调用COMPAT_SYSCALL_DEFINE条目,这很疯狂,并且当人们重构其syscall实现时,您冒着破坏事物的风险。
最重要的是,没有人会尝试这些东西。
有一次 在测试x32时,一位Gentoo开发人员得出结论,切换到ABI x32时的性能改进不如综合测试所示。 来自ABI x32的制造商:
仅与以前的x86架构相比,才可以看到显着的进步,但是与当前的x86-64架构相比,增益是微不足道的(与经典的ABI x32_40测试相比,x86的创建者进行的SPEC测试显示高达64%的加速) H.264编解码器显示了15-20%的加速度)。
成为第一个发表评论