写点什么

乘上腾飞的翅膀——华为鲲鹏生态入门指南

王强

  • 2020-07-16
  • 本文字数:4083 字

    阅读完需:约 13 分钟

乘上腾飞的翅膀——华为鲲鹏生态入门指南

21 世纪第二个十年末,当 ARM 架构的东风由移动计算产业开始吹向传统的服务器和云端市场时,华为公司开发的鲲鹏计算平台也应运而生,凭借优异的硬件性能与功耗表现和生机勃勃的生态建设势头,成为了挑战 x86 服务器霸权的领军力量之一。


作为服务器行业的新生力量,年轻的鲲鹏生态一方面吸引了广大开发者和用户的好奇与关注,另一方面也让习惯了传统 x86 平台的程序员和工程师倍感陌生。缺乏对鲲鹏计算产业的了解,想要加入其中却不知从何下手,是大多数开发人员面对鲲鹏生态时最常遇到的问题。


为此,华为举办了一系列社区建设活动,帮助广大开发者尽快熟悉和上手鲲鹏计算平台,加入鲲鹏社区的大家庭。7 月 11 日,华为在全国 18 城同时举办鲲鹏开发者创享日,为鲲鹏生态建设进一步添砖加瓦。其中,太原站的活动主题就围绕鲲鹏生态概况和鲲鹏平台软件迁移两大热门主题展开,为与会者送上了干货满满的分享课程。


以下内容经由 InfoQ 编辑整理自开发者创享日太原会场的课程。

华为鲲鹏生态介绍

新基建是 2020 年国内经济领域最热门的话题之一。在新基建的概念中,算力增长将成为 GDP 增长的重要拉动力量。在这样的背景下,华为公司凭借雄厚的技术力量和产业势能,正在面向全球打造基于鲲鹏平台的计算产业。鲲鹏计算产业包括了芯片、计算、操作系统、中间件、加速库、工具链、整机、组件等诸多环节,旨在形成端到端的高水平产业竞争力。


鲲鹏计算产业的商业策略主旨是硬件开放,软件开源,使能合作伙伴。如今,鲲鹏生态已经与近 800 家伙伴合作,完成了超过 2000 个解决方案认证,并发展出近 9 万名开发者,建设了 16 家生态创新中心,联合了 65 所 985、211 院校部署人才培训基地。在线上,鲲鹏社区已经集成 400 余篇文档、汇聚 200 多个兼容包,还提供了一系列课程和开发资源。在线下的创新中心与线上的社区论坛,来自华为的高水平专家随时与开发者进行技术交流,响应各类技术问题。


全国各地省份也纷纷与华为公司合作,希望基于鲲鹏发展本地的数字经济。已经落地或筹划中的区域合作项目规模从数十亿到千亿级别不等,从东部发达省份到西部新兴省份都有布局。


今天,年轻的鲲鹏生态已经展现出了巨大的发展潜力。鲲鹏社区建设如火如荼,合作伙伴数量众多,整个生态的参与者都从中看到了宝贵的发展机遇。华为希望与全球合作伙伴共同成长,构建一个忠于梦想,成就不凡的平台,共赢计算新时代。

鲲鹏软件迁移指南

鲲鹏软件迁移概述

计算机是由软件和硬件组成的,硬件底层是包含大量晶体管的芯片,而上层的软件就是用高级语言编写的应用程序。高级语言通过编译器编译成汇编语言,再通过汇编器生成机器码。机器码主要包括指令和数据,而指令则与底层芯片的设计高度相关,不同的平台有着不同的指令集,如 x86、Power、ARMv8 等等。


鲲鹏芯片所使用的 ARMv8 指令集与 Intel、AMD 的芯片所使用的 x86 指令集区别很大,下面就是一个例子:



由于指令集层面的差异,因此在 x86 平台上运行的应用程序转移到鲲鹏平台上时就需要重新编译,整个过程就叫做软件迁移。


根据过往的经验总结,软件迁移可以归纳为迁移准备、迁移分析、编译迁移(包括代码和软件包迁移、性能调优、测试和认证五大步骤。


  • 迁移准备:主要收集软硬件信息,包括芯片和服务器资料,操作系统、中间件、编译器、业务软件等信息。接下来,鲲鹏开发者可以申请 openlab 远程编译环境来为迁移做准备。

  • 迁移分析:主要分析软件栈,制定迁移策略。分析过程分为业务软件和运行环境的展开分析两大类。

  • 编译迁移:这一步主要分为两类,分别是代码迁移和软件包迁移。

  • 性能调优:性能调优主要使用五步法处理。

  • 测试与认证:测试环节主要涉及功能测试、性能测试、场景稳定性测试等,保证迁移完成后的软件可以满足规模化生产环境的各项指标。华为还提供了鲲鹏展翅认证计划,为完成迁移工作的合作伙伴提供认证服务。

典型案例

首先是一个华为内部项目,约 450 万行代码规模,以 C、C++为主,还有一些 Java 和 Python 代码,依赖库 140 多个。迁移过程中涉及了汇编指令迁移】选项修改、数据流修改等操作,还做了代码归一和构建脚本归一,以及一系列性能调优,最后在鲲鹏平台上取得了与 x86 原平台持平的性能表现。


第二个案例是华为某互联网合作伙伴的一个核心应用的迁移。应用以 C 和 C++为主,源码文件 520 多行,需要移植 55 个依赖库,39 个编译问题,最后修改了 195 行代码。这个项目的分析和编译准备阶段用时一月多,代码移植则用时两月,包括对一些依赖库的替换和重编译工作。最后的性能调优用时两月,获得了比移植前更好的性能结果。


第三个案例是金融行业信息系统的整体切换案例。



这个案例的重点是替换了很多无法找到 ARM 对应版本的业务软件,测试场景也繁多复杂。相比典型的迁移过程,这个案例更多涉及软件技术栈的整体迭代更新。


在鲲鹏软件的迁移过程中,代码分析、编译迁移、性能调优等场景都需要对应的工具来协助。华为为此开发了一系列开发套件,帮助开发者完成整个迁移任务。套件中包括分析扫描工具、代码迁移工具、性能优化工具等。这些工具具备一定的智能化水平,并针对鲲鹏平台的特性做了针对性的设计和优化,可以最大程度减少开发人员的负担。

C 和 C++代码迁移

C、C++和 go 都是典型的编译型语言。这种语言开发的程序需要经过针对硬件平台的编译后才能在对应平台上运行。当 x86 平台的 C/C++程序要向鲲鹏平台迁移时,由于两种平台底层的指令集差异,针对 x86 平台编译生成的二进制文件是无法直接在鲲鹏平台运行的。具体而言,两边的编译选项、汇编代码和向量指令集都会有差异。


C/C++代码的编译构建过程

C/C++代码工程主要包括下图中的两类文件:



需要注意,不同的项目需要编译移植的部分是不同的,有些项目可能无需修改代码即可直接编译通过,有些只需要简单的编译选项调整,其他项目就可能要对代码做较大改动。


C/C++代码的编译构建可参考以下流程:


C/C++代码迁移的典型移植问题

1.编译脚本和编译选项移植


不同平台都有自己最合适的编译选项,在移植时就要找出这些特定选项进行修改,以最大程度发挥平台性能。


2.编译宏移植


相同的代码片断在不同平台下可能会存在不同分支,需要尽量发挥不同平台的性能优势。但是对于编译器来说,如何才能得知要编译哪些分支代码呢?这就是编译宏的作用。


3.builtin 函数移植


Builtin 函数是编译器自定义的函数。以 crc32 校验值的计算为例,x86 下面是_builtin_ia32 的形式,鲲鹏下面替换为_aarch64_形式即可。


4.内联汇编函数的移植



上图列举了将字节序进行反序的例子,比如 0X56781314 反序输出的是 0X14137856,x86 上对应的是 bswap 指令,鯤鹏对应的是 rev 指令,两者之间主要是内联汇编规则存在差异。这种迁移就是替换汇编指令的方法。


另一个方法是 builtin 函数替换,比如 popcnt 对应到鯤鹏平台上就是 popcountll。


5.SSE intrinsic 函数移植


这里首先要了解 SIMD 技术。SIMD 是一种单指令处理多数据流的并行处理技术,能够在批量数据操作时进行向量化加速,具有较高的执行效率,应用比较广泛。x86 平台的 SIMD 扩展指令集分为 MMX、SSE 和 AVX 几类,位宽从 64-512 位。鲲鹏平台的 SIMD 指令集是 NEON,也有一些开源库可用。而 intrinsic 是编译器自定义的一些 c 函数,我们调用 c 函数接口就可以使用底层的 SIMD 功能。


迁移过程中,一般使用 AVXtoNeon 和 SSEtoNeon 两个开源工程来迁移 intrinsic 函数。如果存在它们没能覆盖的部分就需要手动替换。


最后,华为还提供了 Porting Advisor 迁移工具来简化迁移过程。


Java、Python 代码迁移

Java 的代码迁移过程如下:



向鲲鹏平台迁移 Java 程序时,第一步是选择合适的 JDK 来安装。



第二步是迁移包含 SO 库的 jar 包。



这里需要对包含 x86 的 SO 库进行重编译,然后替换 SO 库,重新打包 jar 包。


最后是设置 JVM 参数来保证程序稳定快速运行。



JVM 参数要根据业务实际情况来灵活调整。


Python 的代码迁移过程如下:



Python 代码向鲲鹏平台迁移时,首先要将环境升级到 Python 3.x,其次要将 C 编译生成的 SO 库替换为 aarch64 版本,这是两大改动点。


Python 的环境升级很简单,主要针对含 C 或全 C 模块的迁移,核心都是对调用的 SO 库进行重编译,过程如下:


构建 Maven 软件仓库

Maven 是主流的 Java 开发工具之一,它有本地仓库、远程仓库和中央仓库三类软件仓。



远程软件仓一般基于 x86 架构,下载的 jar 包无法直接用在鲲鹏平台上。此时需要扫描软件依赖库,找出对应的 SO 库进行重编译和替换,之后重新构建项目直至不包含 x86 依赖项。


华为使用积累的 jar 包移植构建了鲲鹏的 Maven 软件仓,帮助开发者快速移植。为了让项目在编译时优先搜索这个仓,需要对搜索顺序做配置。


软件包迁移

常见的应用程序包含多种类型的文件,可用 rpm 来打包。rpm 包移植到鲲鹏平台时,需要将 SO、二进制文件等都替换为鲲鹏平台的对应文件。



无法获取支持鲲鹏平台的 rpm 包时,就需要对 x86 包进行重构或下载源码自行编译安装。


在重构 rpm 包时主要分为四个阶段:



这个过程可以使用鲲鹏的 Porting Advisor 开发工具辅助。它可以自动扫描软件包,自动从 Maven 软件仓下载依赖项并打包。但如果 Maven 上没有所需的依赖项,则依旧需要手动编译和打包。

2020 鲲鹏应用创新大赛介绍

由鲲鹏产业源头创新中心举办的 2020 年鲲鹏应用创新大赛正在进行中,此次大赛旨在培养鲲鹏产业发展所需的,基于鲲鹏生态的软件适配、迁移、软件开发、解决方案孵化等研发能力,实现技术与商业创新,为全球企业用户创造更多高价值应用产品与解决方案。


本次大赛面向具备软件开发背景和解决方案的企业参赛者,同一家企业允许多个不同解决方案的团队报名参赛。每支队伍人数不超过 5 人。


本次大赛为区域赛与全国决赛两级赛制,7 大赛题同步进行,决赛中每个赛题将分别评选出 1 个金奖方案及 2 个银奖方案,奖金池总计 500 万元。7 大赛题包括大数据创新解决方案、数字政府创新解决方案、openEuler 商业应用迁移、ARM 原生创新应用、金融行业创新解决方案、openEuler 开源系统迁移和开放命题。


比赛时间安排如下,参赛信息可访问https://www.huaweicloud.com/kunpeng/activity/kunpeng_competition20.html具体了解。


2020-07-16 19:023051

评论

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

EFT【阿凡提】等级规则、收益、排线方法与EFTalk十大关键点

币圈那点事

【LeetCode】寻找旋转排序数组中的最小值Java题解

Albert

算法 LeetCode 4月日更

面试笔记(一)事务连环炮

U2647

分布式事务 事务隔离级别 事务 4月日更

关于机器学习的十大常见问题

澳鹏Appen

人工智能 机器学习 深度学习 大数据 数据

500+解决方案已搭载,英特尔新至强出道不含糊

E科讯

[知识它]一篇文章或一本书是怎么写出来的

知识它

写作技巧 写文章 快速写作 写作方法

Golang 字符串分组

一代咩神

Go 语言

区块链电子合同--助推合同数字化管理

13530558032

翻译:《实用的Python编程》08_00_Overview

codists

Python

正点原子:STM32F103(战舰)、STM32F407(探索者)、STM32F103(MINI)原理图和PCB

不脱发的程序猿

开发板 stm32 硬件设计 4月日更 正点原子

GitHub爆火!银四巨作:拼多多/蚂蚁/百度面经分享

比伯

Java 架构 面试 程序人生 技术宅

语音聊天室 anyHouse 使用手册

anyRTC开发者

ios android 音视频 WebRTC RTC

团队协作中,如何写出让同事赞不绝口的代码

有道技术团队

代码规范

技术分享第二讲报名!

神策技术社区

大数据 活动 报名 神策

Javascript执行机制-任务队列

Sakura

基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之布局菜单嵌套路由(三)

crudapi

Vue crud crudapi quasar 路由

Redis 客户端服务端命令数据交换

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

重磅功能!博睿数据APM助企业从容应对云原生架构演进

博睿数据

应用性能监控产品 Bonree Server 博睿数据 bonree

Python实现植物大战僵尸

不脱发的程序猿

Python GitHub 开源 游戏开发 4月日更

Linux cat 命令

一个大红包

4月日更

多功能工具箱Quicker+笔记软件flomo,竟然还能擦出这样的火花?

彭宏豪95

效率 工具软件 笔记 工具分享 4月日更

华云大咖说 | 华云数据与海量数据携手共建国产云生态

华云数据

区块链农产品质量安全溯源,保证农产品品质

13530558032

区块链数据共享平台—追踪、溯源、可信

电微13828808271

区块链+

以太坊杀手?NA公链(Nirvana)Chain忠于挑战自己NAC公链

区块链第一资讯

火山引擎 Redis 云原生实践

火山引擎开发者社区

云原生 redis cluster

阿里最强 Python 自动化工具开源了!

星安果

Python 开源 自动化 阿里

“区块链+电子处方”,医疗跟更健康

电微13828808271

kubectl top node报错及解决

箭上有毒

智慧平安社区建设,创建“三零平安社区”

13530558032

SumSwap节点预售关注度飙升而Uniswap V3版本却备受争议

币圈资讯

乘上腾飞的翅膀——华为鲲鹏生态入门指南_语言 & 开发_InfoQ精选文章