如何实现从x86到鲲鹏平台90%的 C/C++ 代码自动迁移?

2020 年 3 月 28 日

如何实现从x86到鲲鹏平台90%的 C/C++ 代码自动迁移?

如今,我们几乎所有软件都建立在 x86 架构之上 ,在互联网漫长的演进过程中,各大公司拼尽全力在迭代上层架构、优化整体性能,开发者们该用的、能用的招儿想必都用上了,接下来呢?如果底层架构不出现大的革新,接下来还有什么方法大幅提升生产力?各位开发者还有其他选择吗?


从大型机到 x86 架构,计算的下一个拐点在哪?


上世纪 60 年代,IBM 发布了 System360 这样的大型计算机,促进了人类社会巨大的进步,卫星气象预测、登月等活动都依赖于这样的大型计算机完成。如今,银行的核心系统仍然在运行着这种大型机。但是,这种大型机有一个很大的问题:只有比较富裕的机构才能用得起,比如银行。


于是,上世纪 70 年代,DEC 解决了这个问题,这是一个值得注意的拐点:研发人员用小型机发布了 PDP-11,大幅度降低了大型机的成本,让大量企业能够用得起这样的计算机,这是一次巨大的进步。


随后,英特尔出现了,不光企业能用计算机,个人也能用了,每个人桌面上都有一台电脑。上世纪 70 年代,依赖于英特尔 x86 芯片的 PC 机出现了,其最大的贡献就是让计算机从企业走向个人。


发展至今,几乎所有软件均建立在 x86 架构之上 ,随着近二十年中国互联网的快速演进,各大公司在上层架构的设计与优化方面投入了大量精力,在系统整体性能方面,该用的、能用的都用上了。


如今,新的拐点出现了:计算已经变成手持的了,每个人手上都有智能终端。不仅如此,应用场景也在变:移动应用逐渐云化,5G 催生了云游戏的诞生;Web 应用的加密性越来越重要,HTTPS 流量越来越大;大数据分布式并行计算成为主流等,这些都让 x86 架构的不足逐渐显露出来。


以移动应用运行为例,传统的 x86 平台依赖指令翻译运行安卓应用,性能损耗大,兼容性也无法保障。此外,服务器端有很多应用需要测试,过去的做法是真机测试,或者手机开发仿真环境,这种做法的资源灵活度低、故障率高、可靠性和易用性都比较差。而真正的革新可能还是需要自底向上,甚至直达芯片级。x86 架构未来能满足开发者的诉求吗?有可能,因为 Intel 一直是比较开放的,也投入了很多力量在社区建设,包括开源上面。


但是,企业和开发者需要更多选择。单位芯片面积算力更强、众核架构设计的 ARM 开始被注意。一个 ARM 核的面积仅为 x86 核的七分之一,同样的芯片尺寸下,ARM 的核数是 x86 的 4 倍以上,由于芯片的物理尺寸有限制,无法无限制增加,ARM 的众核横向扩展更符合分布式业务需求。


2019 年,华为鲲鹏 920 处理器正式发布,这是一个基于 ARM 架构,采用最新制程工艺制造,可以支持 32/48/64 个内核,主频可达 2.6GHz,支持 8 通道 DDR4、PCIe 4.0 和 100G RoCE 网络的处理器。


相较于 x86 架构,华为鲲鹏处理器的优势较为明显:


1、多核,性能提升 20%,云应用支持度更好,更灵活;


2、支持 8 个 DDR 通道,传统 CPU 仅 6 个,吞吐率提升 25%;


3、SOC 芯片,一颗芯片四合一,包含 CPU、南桥、网卡和 SAS 控制器,效能提升 30%;


4、集成压缩、加密、重删等硬件加速引擎的处理器,大大提升应用的性能,释放更多 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、中标麒麟 、UOS 等。


对于新的应用而言,可以很轻松的选择基于鲲鹏平台开发。那么,传统架构怎么办,基于 x86 的服务如何迁移?


跨平台软件迁移实践


软件迁移是指将某个可运行的程序,由原来的环境迁移到另一个环境,并重新运行。改变的环境可能是处理器架构、操作系统、软件运行环境等。总的来说,软件移植是个“脏活”,需要开发者修改源码、编译、再修改、再编译,费时费力。


对此,华为计算产品线主任工程师,华为鲲鹏开发套件的设计者张汝涛在最近的《如何实现从 x86 到鲲鹏平台 90%C/C++代码自动迁移》的演讲中表示,华为提供了鲲鹏开发者套件,帮助用户基于 C/C++ 源码提升移植效率;其次,鲲鹏社区提供了大量的兼容鲲鹏计算平台的开源软件包供开发者下载直接使用,不用开发者二次移植;另外,移植过程中碰到的任何问题,在鲲鹏社区或OpenLab有专业的技术人员在线进行支持。


简单来说,应用迁移至 x86 平台可以分为三大类型:



第一类是 Java、Python 等解释型语言。由于这类语言本身支持跨平台,只要运行环境 OK 即可,前提是原应用在运行中不依赖 C 或 C++语言编译产生的公共组件(SO 库文件或可执行文件)。如果满足上述条件,则应用不需要重新编译,基于 x86 的 Jar 包可以直接运行在 ARM64 服务器,不需要维护两个分支代码,这是最简单的一类迁移。


第二类是 C、C++或 Go 等编译型语言。这类应用需要采用 ARM64 的 GCC 编译器重新编译即可运行,只要有源代码就不用担心;如果没有源代码,华为也提供了相关的方案,下文详述。


第三类是汇编语言应用。这类应用本身占比较少,重新编译不行,需要重新写一遍,如果不能重写,在指令集翻译工具研发推出后也可以解决这个问题。


实现 90%的 C、C++代码自动迁移


如上所述,C、C++语言的应用迁移略复杂。C 语言自诞生以来,被广泛用于开发各行各业的软件。C++语言既保留了 C 语言有效性、灵活性等特点,又增加了面对对象编程的支持,具有强大的编程功能,多年来一直是程序喜爱的编程语言之一。


C/C++是编译型语言,硬件平台的切换将导致原有 C/C++程序不能运行,开发者不得不解决软件移植问题。基于编译型语言开发的应用程序,其编译后所得可执行程序,二进制执行指令是 CPU 架构相关的。因此,基于 x86 架构编译的 C/C++语言应用程序,无法直接在 ARM 服务器运行,需要进行移植编译。这里的移植前提一是基于 Linux 的应用程序;二是无 x86 汇编指令代码,具体步骤如下所示:



在编译的过程中,开发者可能会遇到一些问题:


1.软件工程构建文件中包含-march 与-mtune 编译参数,如果提示参数不兼容,则需要调整,可能兼容的调整后参数为:-march=ARMv8.1-a -tune=tsv110


2.参数设置指导请参考:https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html


3.编译时遇到找不到函数、缺少库文件等错误,安装对应的鲲鹏平台兼容的依赖库,安装方法同 x86 服务器


4.开源项目库不支持 ARM 架构,这种情况较少,一般发生在较旧的项目代码;解决方法包括:修改代码,寻求替代组件等


5.编译时提示代码错误,可能需要根据平台差异修改部分代码,例如平台类型相关宏定义


6.汇编程序和 C/C++源代码中内联汇编需要重写,ARM 和 x86 架构指令集不兼容。



为应对上述问题,张汝涛表示,华为鲲鹏平台提供了完整的工具链帮助开发者提高应用迁移或者调用的效率,比如:


  • 扫描工具:Dependency Advisor,检查用户软件资源包二进制文件,并评估可移植性;检查指定的用户软件安装路径下的二进制文件,并评估可移植性;检查用户软件C/C++源码、软件构建工程文件,并评估可移植性;向用户提供软件移植报告,提供移植工作量评估;支持命令行方式和Web两种工作模式。

  • 移植工具:Porting Advisor,检查用户软件C/C++软件构建工程文件,并提供修改建议;检查用户软件C/C++源码,并提供修改建议;检查用户软件中x86汇编代码,并提供修改建议;支持命令行和Web两种访问方式;提供一键式移植软件到鲲鹏平台;支持用户RPM、DEB软件包重构。

  • 性能优化工具:Tuning Kit,支持安全可靠的升级回退功能;支持系统性能数据采集和分析,包括:CPU、内存、磁盘IO、网络IO,根据现有积累的经验,对已经明确的指标给出基准参考值和优化建议;支持Java程序性能分析;支持和Porting & Dependency Advisor同时部署在同一台机器。

  • 加速库:从底层算力进一步提升应用软件性能,glibc基础库目前已经在鲲鹏开源社区开源,优化了16个最常用的接口,相当于Intel优化范围的10%;HMPP适配接口数501个,占IPP信号库接口的38.5%,占IPP库总接口的11%,对标Intel IPP完成功能测试。



过往,曾有企业尝试将大数据搜索系统迁移到鲲鹏平台。我们可以此为例总结整个迁移过程,根据张汝涛的介绍,迁移过程共分为如下四步:


1、用户业务软件栈汇总及兼容性分析;


2、用户业务软件组件依赖分析——华为鲲鹏代码迁移工具;


3、C/C++软件移植修改建议:


4、性能分析优化;


在这个过程中,华为提供了完整的开发者套件,可以帮助开发者检测 C、C++ 软件构建配置文件,检测 C、C++源码及 x86 汇编指令,并且根据检测出的软件修改规模进行工作量评估。其中,由于指令集不同,开发者重点关注汇编指令移植即可。



移植完成,一切才刚刚开始


软件迁移不仅是个工程问题,也是个技术问题,迁移只是第一步,张汝涛表示,鲲鹏平台为企业和开发者提供了一系列完整的服务和生态共建方案。



为了让鲲鹏能够更好地服务各行各业,华为接下来将构建以开发者为中心的人才发展体系,针对开发者在学习、训练、构建、社交等阶段的不同需求,针对性的提供相应资源政策与活动,并优化流程,具体如下:


50 多家大学加入沃土高校教研扶持


为了让广大学生开发者掌握基于鲲鹏平台的开发技能,华为已与 50 多家高校开展了鲲鹏相关的教学与科研合作。以教材为例,华为已经发布了 20 套书面教材和超过 200 套线上课程。未来,还将有更多高校加入沃土计划,与华为共同培养鲲鹏人才。


24 类华为认证


目前,华为已发布 24 类鲲鹏相关的职业认证,并且已被众多企业与机构认可,这是鲲鹏合作伙伴的必备条件,也是个人求职与晋升的有力凭证。未来,具备 HCIE 认证的开发者一定是职场上的高精尖人才。


上线“沃土计划 2.0”激励细则


去年,华为宣布沃土计划 2.0,五年投入 15 亿美金,覆盖四个领域,分别面向高校,初创企业,开发人员及合作伙伴。如今,所有激励细则均已上线,初创企业最高可获得 75 万人民币的云券,欢迎大家申请。2020 年,华为将投入两亿美金,并公布了针对高校,初创企业,开发人员及合作伙伴的具体人才扶持细则。


  • 高校教研扶持:面向高校,提供 1 亿人民币的扶持金额,包括人才培养,云资源及样机支持,同时华为与教育部签署 3 年协议投入 10 亿人民币,共同推进人才的培养。

  • 初创企业及开发人员扶持:面向初创企业及个体开发人员,以云资源及线下活动的方式发放 1 亿人民币的补助,每家初创公司最高可获得 75 万人民币的云券。

  • 合作伙伴发展扶持:面向合作伙伴,提供 6 亿人民币的扶持总额,其中 3 亿人民币一次性研发费用补贴,3 亿人民币的云资源。


最后,希望各位开发者可以放心尝试在鲲鹏平台之上用代码改变世界。当一个新技术出现时,开发者最擅长的就是抓住它;当一个新的计算拐点出现,开发者大可勇敢的拥抱,一起参与这场可能的 IT 革命。


嘉宾介绍:


张汝涛,现任华为计算产品线主任工程师,华为鲲鹏开发套件的规划设计者,负责架构和功能设计。从事软件开发 20 年,在嵌入式软件、企业软件领域有丰富的经验。原 ARM 开源软件部门主任工程师,从事 ARM64 平台开源软件开发、移植和性能优化,完善软件生态。主要贡献于云、存储、网络相关的多个开源项目。多次在开源项目的峰会和社区会议上交流 ARM64 平台软件开发、优化经验。


2020 年 3 月 28 日 15:412839

评论

发布
暂无评论
发现更多内容

云小课 | 需求任务还未分解,该咋整!项目管理Scrum项目工作分解的心酸谁能知?

华为云开发者社区

项目管理 敏捷 devcloud

ETH场外交易系统开发流程丨ETH场外交易开发源码案例

系统开发咨询1357O98O718

ETH场外交易系统开发

如何降低微服务测试成本?我的经验之谈

阿里巴巴中间件

5分钟完成业务实时监控系统搭建,是一种什么样的体验?

阿里巴巴中间件

体验 监控

产品推荐 | 还在自研?快来解锁拍乐云互动白板

拍乐云Pano

音视频 在线教育 RTC 互动白板

深入浅出理解视频编解码技术

拍乐云Pano

音视频 RTC 拍乐云 视频编解码 视频算法

构建一张音视频全球大网究竟需要多少个节点?Pano Backbone技术探秘

拍乐云Pano

音视频 RTC 实时音视频 音视频算法 拍乐云

北京天源迪科与重庆邮电大学移通学院成功签约

DT极客

第12周总结

饭桶

Forsage系统开发(模式分析)

系统开发咨询1357O98O718

Forsage系统开发案例介绍

熬夜整理10 万字节详细面试笔记(带完整目录) 良心分享

Crud的程序员

Java 编程 程序员 架构 java面试

快来!开源一份阿里微服务指导手册:SpringBoot+SpringCloud+消息中间件

Java架构追梦

Java 架构 面试 微服务

vivo 全球商城:从 0 到 1 代销业务的融合之路

vivo互联网技术

架构 分布式 商城项目 商城

OKO疯矿链系统开发案例(源码)

系统开发咨询1357O98O718

OKO疯矿链系统开发

喜讯 | 拍乐云荣登2020「年度最具投资价值创新企业TOP20」榜单

拍乐云Pano

音视频 实时音视频 音视频算法 拍乐云

Gemini双子新约交易所系统软件APP开发

开發I852946OIIO

系统开发

有道逻辑英语-时态新发现笔记

Leo

学习 前端进阶训练营 笔记 时态

看到Mybatis源码就感到烦躁,怎么办?

田维常

mybatis

TRONex波场智能合约系统开发详解丨TRONex波场链系统开发(源码)

系统开发咨询1357O98O718

系统开发 TRONex波场智能合约 APP开发

年终盘点 | 七年零故障支撑双11的消息中间件 RocketMQ,怎么做到的?

阿里巴巴中间件

消息中间件 双十一

COMP矿池矿机系统开发案例分析

系统开发咨询1357O98O718

COMP矿池矿机系统开发介绍

投行工作的本质 | 读《投行职业进阶指南:从新手到合伙人》

邓瑞恒Ryan

读书笔记 投资 金融 投行 职业第二曲线

公安大数据分析系统开发,情报研判系统搭建

t13823115967

智慧公安

使用Angular8和百度地图api开发《旅游清单》

徐小夕

Java angular.js 前端 angular

第12周作业

饭桶

BMEX交易所系统软件开发|BMEX交易所APP开发

开發I852946OIIO

系统开发

《微信小程序开发入门与实践》.pdf

田维常

区块链应用落地,物流供应链平台搭建

t13823115967

区块链应用

【涂鸦物联网足迹】物联网常见通信协议

IoT云工坊

物联网 HTTP 通信协议 mqtt coap

LeetCode题解:433. 最小基因变化,BFS,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

Learun FrameWork,.Net Core3.1工作流引擎平台

力软.net/java开发平台

.net core 工作流引擎

如何实现从x86到鲲鹏平台90%的 C/C++ 代码自动迁移?-InfoQ