当前位置: 首页 > Linux

最后,我决定把代码搬出x86架构!

时间:2023-04-06 11:52:21 Linux

今天,几乎我们所有的软件都是建立在x86架构上的。在互联网漫长的演进过程中,各大公司都想尽办法迭代上层架构,优化整体性能。开发者应该用什么,可以用什么招数我肯定都用过了,接下来呢?如果底层架构没有大的创新,下一步大幅提升生产力的途径是什么?你们还有其他选择吗?1从大型机到x86架构,计算的下一个拐点在哪里?1960年代,IBM推出了System360这样的大型计算机,推动了人类社会的巨大进步。卫星天气预报、登月等活动都离不开这样的大型计算机。如今,银行的核心系统仍在此类大型机上运行。但是,这种大型机有一个很大的问题:只有比较富裕的机构才能买得起,比如银行。于是,在1970年代,DEC解决了这个问题,这是一个值得关注的转折点:研发人员发布了带有小型机的PDP-11,大大降低了大型机的成本,让大量的公司买得起这样的计算机,这就是一个巨大的进步。然后,英特尔出现了,不仅企业可以用电脑,个人也可以用了。每个人的桌面上都有一台电脑。70年代出现了依托于Intelx86芯片的PC,它们最大的贡献就是将电脑从企业带到了个人。到目前为止,几乎所有的软件都是基于x86架构的。随着中国互联网近二十年的快速演进,各大公司都在上层架构的设计和优化上投入了大量的精力。在整体系统性能方面,应用Everything能用的都用上了。今天,一个新的拐点出现了:计算变成了掌上电脑,每个人手中都有一个智能终端。不仅如此,应用场景也在发生变化:移动应用逐渐云化,5G催生了云游戏;Web应用的加密越来越重要,HTTPS流量越来越大;大数据分布式并行计算成为主流等等,这些都逐渐暴露了x86架构的不足。以移动应用的运行为例,传统的x86平台依靠指令翻译来运行Android应用,性能损失较大,兼容性也得不到保证。另外,服务器端还有很多应用需要测试。以往都是使用真机测试或者手机开发模拟环境。这种方法资源灵活性低,故障率高,可靠性和可用性差。而真正的创新,可能还是需要自下而上,甚至直接到芯片层面。x86架构能否满足未来开发者的需求?有可能,因为Intel一直以来都是比较开放的,在社区建设上投入了大量的精力,包括开源。然而,企业和开发者想要更多的选择。具有更强单位芯片面积计算能力和多核架构设计的ARM开始受到关注。一个ARM内核的面积只有x86内核的七分之一。在相同芯片尺寸下,ARM内核数是x86的4倍多。由于芯片物理尺寸的限制,不能无限制地增加。扩容更符合分布式业务需求。2019年,华为鲲鹏920处理器正式发布,基于ARM架构,采用最新制程工艺制造。可支持32/48/64核,主频可达2.6GHz,支持8通道DDR4、PCIe4.0和100GProcessorforRoCE网络。与x86架构相比,华为鲲鹏处理器优势明显:多核,性能提升20%,云应用支持更好,灵活性更高;支持8个DDR通道,传统CPU只有6个,吞吐率提升25%;SOC芯片,CPU、南桥、网卡、SAS控制器四合一芯片,性能提升30%;处理器集成压缩、加密、去重等硬件加速引擎,大幅提升应用性能,释放更多Multi-CPU计算能力。值得注意的是,鲲鹏的基础生态相当完善,尤其是与开发者息息相关的主流技术基本都得到了支持,比如Web支持Nginx、Apache、Tomcat,中间件支持Memcached、Redis、Kafka,数据库支持MySQL,Mariadb,PostgreSQL,大数据支持Hadoop,Hive,HBase,开发语言支持Go,C/C++,Java,Ruby,Perl,Python,JavaScript等,操作系统支持openEuler,Ubuntu,CentOS,WinnerKirin,UOS,等等,对于新的应用,很容易选择基于鲲鹏平台开发。那么,传统架构如何,基于x86的服务如何迁移?2跨平台软件迁移实践软件迁移是指将一个可运行的程序从原来的环境迁移到另一个环境并重新运行。改变的环境可能是处理器架构、操作系统、软件运行环境等。总的来说,软件移植是一项“脏活”,需要开发者修改源代码,编译、修改、重新编译,费时费力。对此,华为计算产品线总工程师、华为鲲鹏开发包设计师张如涛在近日的《如何实现从 x86 到鲲鹏平台 90%C/C++ 代码自动迁移》演讲中表示,华为提供鲲鹏开发包,帮助用户提高基于C/C++源码的移植效率代码;其次,鲲鹏社区提供了大量兼容鲲鹏计算平台的开源软件包,供开发者直接下载使用,无需开发者重新移植;另外,对于移植过程中遇到的任何问题,鲲鹏社区或OpenLab在线都有专业技术人员支持。简单来说,迁移到x86平台的应用可以分为三种:第一类是Java、Python等解释型语言。由于这类语言本身就支持跨平台,只要运行环境OK,前提是原应用在运行时不依赖C或C++语言编译的公共组件(SO库文件或可执行文件).如果满足以上条件,应用程序不需要重新编译,基于x86的Jar包可以直接在ARM64服务器上运行,不需要维护两个分支代码。这是最简单的迁移类型。第二类是编译型语言,像C、C++或Go。这类应用需要用ARM64GCC编译器重新编译才能运行。只要有源码,就不用担心;如果没有源码,华为也提供了相关解决方案,下面详述。第三类是汇编语言应用。这类应用本身占比很小,重新编译不行,需要重写。如果不能重写,这个问题也可以在指令集翻译工具开发上线后解决。实现90%的C、C++代码的自动迁移上面说过,C、C++语言的应用迁移稍微复杂一点。C语言自诞生以来,就被广泛用于各行各业的软件开发。C++语言不仅保留了C语言的有效性和灵活性,而且增加了对面向对象编程的支持。它具有强大的编程功能,多年来一直是人们最喜欢的编程语言之一。C/C++是一种编译型语言。切换硬件平台会导致原有的C/C++程序无法运行,开发者不得不解决软件移植的问题。对于基于编译型语言开发的应用程序,编译后的可执行程序和二进制执行指令与CPU架构相关。因此,基于x86架构编译的C/C++语言应用程序不能直接在ARM服务器上运行,需要移植编译。这里的移植前提首先是基于Linux的应用程序;二是没有x86汇编指令代码,具体步骤如下:参数不兼容,需要调整。调整后可能兼容的参数有:-march=ARMv8.1-a-tune=tsv110参数设置指导请参考:ARMOptions(UsingtheGNUCompilerCollection(GCC))encounterederrorssuchasmissingfunctionsandmissing编译时安装库文件,并安装相应的兼容鲲鹏平台的依赖库。安装方法同x86服务器。开源项目库不支持ARM架构。较旧的项目代码;解决方案包括:修改代码,寻找替代组件等。编译时提示代码错误,可能需要根据平台差异修改部分代码,如C/C++中依赖于平台类型的宏定义汇编器和内联汇编源代码需要重写,ARM和x86架构指令集不兼容。针对上述问题,张如涛表示,华为鲲鹏平台提供了完整的工具链,帮助开发者提高应用迁移或调用效率,例如:扫描工具:DependencyAdvisor,检查用户软件资源包二进制文件,以及评估便携性;检查指定用户软件安装路径下的二进制文件,评估可移植性;检查用户软件C/C++源代码、软件构建工程文件,评估可移植性;向用户提供软件移植报告,并提供移植性评估;支持命令行和Web两种工作模式。移植工具:PortingAdvisor,查看用户软件C/C++软件构建工程文件,并提供修改建议;检查用户软件C/C++源码,并提出修改建议;检查用户软件中的x86汇编代码,并提出修改建议;支持命令两种访问方式:线路和网络;提供软件一键移植到鲲鹏平台;支持用户RPM、DEB软件包重构。性能优化工具:TuningKit,支持安全可靠的升级回滚功能;支持系统性能数据采集分析,包括:CPU、内存、磁盘IO、网络IO,根据现有积累的经验,对指定指标给出Benchmark参考值和优化建议;支持Java程序性能分析;支持和Porting&DependencyAdvisor同时部署在同一台机器上。加速库:从底层算力进一步提升应用软件的性能,在鲲鹏开源社区开源了glibc基础库,对最常用的16个接口进行了优化,相当于10%英特尔的优化范围;HMPP适配接口数为501个,占IPP信号库接口数的38.5%,占IPP库接口总数的11%,完成了对标英特尔IPP的功能测试。过去,一些公司试图将他们的大数据搜索系统迁移到鲲鹏平台。我们可以以此为例来总结整个迁移过程。据张如涛介绍,迁移过程分为以下四个步骤:1、用户业务软件栈汇总及兼容性分析;2、用户业务软件组件依赖分析——华为鲲鹏代码迁移工具;3、C/C++软件移植及修改建议:4、性能分析及优化;在这个过程中,华为提供了完整的开发者工具包,可以帮助开发者检测C和C++软件构建配置文件,检测C和C++源代码和x86汇编指令,并根据检测到的软件修改大小评估工作量。其中,由于指令集不同,开发者只需要专注于移植汇编指令即可。3迁移完成,一切才刚刚开始。软件移植不仅是一个工程问题,更是一个技术问题。迁移只是第一步。张如涛表示,鲲鹏平台为企业和开发者提供了一系列完整的服务和生态共建解决方案。为了让鲲鹏更好地服务各行各业,华为将构建以开发者为中心的人才发展体系,为开发者在学习、培训、建设、社交等不同阶段提供针对性资源。政策与活动,优化流程,具体如下:50余所高校加入高校教研支持的沃土为了让广大学生开发者掌握基于鲲鹏平台的开发技能,华为与50多所高校开展了鲲鹏相关的教学和科研合作。以教材为例,华为已发布20套书面教材和200多套在线课程。未来,更多高校将加入沃土计划,与华为共同培养鲲鹏人才。24类华为认证目前,华为已经发布了24类鲲鹏相关专业认证,得到了众多企事业单位的认可。未来,拥有HCIE认证的开发者一定是职场高层次人才。“沃土计划2.0”启动激励细则去年,华为公布了沃土计划2.0,将在5年内投入15亿,涵盖四大领域,面向高校、初创企业、开发者和合作伙伴。现在,激励规则全部上线,初创企业最高可获得75万元云券。欢迎大家申请。2020年,华为将投入2亿,并公布了针对大学、初创企业、开发者和合作伙伴的具体人才扶持细则。高校教研支持:为高校提供1亿元,包括人才培养、云资源、样机支持等。同时,华为与教育部签署了为期三年的投资10亿元人民币共同推进人才培养的协议。对初创企业和开发者的扶持:对初创企业和个人开发者,以云资源和线下活动的形式发放1亿元补贴。每家创业公司最高可获得75万元的云券一张。合作伙伴发展支持:为合作伙伴提供总计6亿元的支持,其中3亿元为一次性研发补贴,3亿元为云资源。最后,希望所有的开发者都能放心地尝试在鲲鹏平台上用代码改变世界。当一项新技术出现时,开发者最擅长的就是去把握它;当一个新的计算拐点出现时,开发者可以勇敢地拥抱它,共同参与这场可能的IT革命。嘉宾介绍:张如涛,现任华为计算产品线总工程师,华为鲲鹏开发包规划师和设计师,负责架构和功能设计。从事软件开发20年,在嵌入式软件和企业软件方面有着丰富的经验。前ARM开源软件部总工程师,从事ARM64平台开源软件开发、移植和性能优化,完善软件生态。主要贡献了多个与云、存储、网络相关的开源项目。多次在开源项目峰会和社区会议上交流ARM64平台软件开发和优化经验。点击关注,第一时间了解华为云的新鲜技术~