玄铁团队与PLCT实验室联合发布:新32位产品级开源工具链及Linux内核
AIoT技术的快速发展不断推高了对微控制器(MCU)和应用处理器(AP)计算能力的需求,这使得传统32位架构的性能局限性日益明显。在此架构中,内存访问和原子操作指令不再能有效满足现代操作系统的性能要求和精巧设计,从而推动了向64位硬件架构的转变。在这种转变中,32位软件在64位架构上运行时存在指针宽度与硬件寄存器宽度不匹配的问题。在过去的 64ILP32 ABI 实践中是通过编译器添加零扩展指令来解决这一不匹配问题,但这降低了性能。为克服该性能问题,达摩院-玄铁团队提出了松弛扩展寻址模式(Relaxed-Addressing Mode),并与中科院软件所-PLCT实验室联合发布了业界首款RISC-V新32位产品级开源工具链(rv64ilp32 toolchain)和 Linux 内核。在对比测试中新32位 Linux 内核展现了诸多优势:相比传统32位,大幅提升内核的综合性能;相比传统64位,Fedora 团队在K230芯片上利用新32位内核节省内存,降低成本。此举旨在充分利用64位硬件的计算优势,从而显著提升了新32位嵌入式系统的综合性能,标志着嵌入式处理器从32位向64位转型的关键进展。
松弛扩展寻址
历史上,64ILP32 ABI的实施面临着的主要障碍是:32位指针与64位寄存器之间的不匹配问题,这不仅引起性能损失,还增加了编译器的复杂性。虽然零扩展寻址(Zero-extend Addressing)在 x86-x32 和 aarch64-ilp32 ABI 中得到采用,但额外的零扩展指令降低了程序效率。与之相比,32ILP32 和 64LP64 ABI 因指针长度与寄存器宽度一致,避免了这种性能开销。面对这些挑战,我们首先考虑了符号扩展寻址(Sign-extend Addressing),它在一定程度上减缓了零扩展的性能问题,但增加了编译器和内核实现的复杂度。于是,我们提出了松弛扩展寻址(Relax-extend Addressing)方案,它通过硬件的指针掩码功能,允许在执行32位寻址操作时忽略64位寄存器的高32位,大幅简化了编译器工作,降低指令数量,并保持了安全性与可靠性。我们对以上三种寻址模式总结如下:
● 抹零扩展寻址:传统方法,需要编译器生成额外的的指令来清零高32位,导致性能损失。
● 符号扩展寻址:改良方案,通过操作系统页表的双重映射,合法化32位符号位扩展,缓解零扩展的性能开销。
● 松弛扩展寻址:创新方案,依赖处理器硬件掩码来实现高效寻址,彻底消除了寻址时的性能损失。
因此,松弛扩展被我们选定为 RV64ILP32 ABI 的默认寻址模式,它要求 RISC-V 64位处理器支持寻址掩码功能,对硬件设计提出了新的要求。我们在 QEMU 上实验该功能,并证明了基于松弛扩展寻址模式的 RV64ILP32 工具链的有效性。
新32位内核
新32位工具链基于 RISC-V 64ilp32 ABI,融合了松弛扩展寻址技术,让64位硬件流畅运行新32位软件。我们在 qemu 上实现了硬件松弛扩展寻址模式,并用新工具链构建了业内首款新32位Linux内核。
与传统32位对比,尽管新32位和传统32位都是32位Linux操作系统软件,但新32位得益于64位指令集,其性能显著优于传统32位:
如上图所示,新32位内核的 iperf3-tcp 测试大幅领先,在软件 ABI 相同的情况下,使用 64 位指令架构能极大提升操作系统的性能。本次qemu 测试仅供参考,请联系硬件供应商获得真实的性能差距报告,本测试用例已在工具链发布包内,请大家直接下载自行体验,动画测试的全过程见下方链接:
https://mp.weixin.qq.com/s/argIGP4_rUKDm9IRIB-YTg
与传统64位对比,Fedora 团队完成了 RISC-V 新32位在 k230 硬件平台的适配,新32位避免了39%的内存浪费,其成本优势使 Fedora RISC-V 能在嵌入式领域有更广泛的应用,具体请参考:
https://fedoraproject.org/wiki/Architectures/RISC-V/64ILP32
新32位工具链
让32位软件运行在64位硬件上不仅更快而且更省,这正是我们新32位编译器的优势所在,不禁让人想起中国古代田忌赛马的故事,与传统32位比性能,与传统64位比成本。换言之,新32位就是要取代传统32位,与64位形成互补。在进一步的测试中,我们观察到了传统32位的明显不足:
如上图所示,在处理长数据类型时,传统32位的编译器生成了超过10条额外指令来操作保存的变量。相反,当采用新32位工具链时,编译器会直接利用64位指令来处理这些数据,大幅度减少了所需指令的数量。
本次发布的新32位工具链通过了33万个测试用例,其中包含 192133 个 g++ 用例, 与 143498 个 gcc 用例 ,全面覆盖编译器的各项功能,测试结果与 GCC13 release 保持一致,达到产品级质量要求。相比传统32位,它的优势如下:
● 更强大的性能: 新32位编译器在处理长数据类型时更加高效,因为它无需进行额外的寄存器拼接或零扩展操作。这可以显著减少指令数量,提高程序的执行效率,特别是在涉及大量长数据类型操作的情况下。
● 更好的兼容性: 新32位编译器可以与传统64位编译器兼容,因为它们基于相同的硬件指令集。这意味着开发者可以更轻松地将现有的64位汇编代码迁移到新32位平台上,而无需做出太多修改。
● 更多的扩展性: 随着技术的发展和需求的增长,对更大的内存空间和更高性能的需求也在不断增加。新32位的硬件平台可以为未来的扩展性提供了更好的支持,因为它能无缝切换到传统64位以满足更高要求的应用程序。
● **产品级的质量:**新32位工具链经过大量测试验证,保证使用的正确性与稳定性,同时在RUYISDK开源仓库中进行维护更新,及时解决用户遇到的各种问题。
快速上手:https://github.com/ruyisdk/riscv-gnu-toolchain-rv64ilp32/
技术支持:https://github.com/ruyisdk/riscv-gnu-toolchain-rv64ilp32/issues/
结束语
松弛扩展寻址技术在新32位工具链中扮演着关键角色,为嵌入式系统的开发和部署提供了全新的解决方案。作为业内首款基于松弛扩展寻址技术的新32位产品级开源工具链和Linux内核,标志着嵌入式系统开发领域的一次重要创新。我们热切期待开发者们积极参与到新32位的开发和完善中,共同提出宝贵的建议和意见,推动新32位不断发展。我们致力于建立一个健康和活跃的开源社区,将持续投入资源和精力,确保新32位的稳定性和可靠性,并不断改进和完善其功能和性能。在此,我们也呼吁更多的硬件厂商加入我们的阵营,共同推动新32位嵌入式系统的发展和创新,为行业带来更多的可能性和机遇。
相关阅读
● rv64ilp32: The future of the 32-bit Linux
关于我们
●PLCT GNU小队是专注GNU工具链开发的团队,目前致力于维护GNU RISC-V后端支持工作,包括草案支持及性能优化。作为开源社区的积极贡献者,我们矢志不渝地推动RISC-V架构在GNU工具链中的广泛应用与性能提升,欢迎交流合作。
● 达摩院玄铁团队持续深耕RISC-V技术研发及生态建设,并陆续推出了一系列玄铁处理器,可满足高中低全系列性能需求。玄铁积极拥抱开源,坚持开放创新,已逐渐构建起以RISC-V为核心的生态体系,与生态伙伴协同推动RISC-V芯片、开发工具、操作系统、应用解决方案等不同层面的软硬一体化发展。全力推动RISC-V软硬全栈技术多领域发展落地,加速实现智能时代的万物互联!