
关心前沿科技动向的 IT 从业者,一定对近期大热的鲲鹏产业生态有所耳闻。在服务器和云端计算领域 ARM 架构崛起的大背景下,由华为自主研发的鲲鹏系列服务器 CPU 凭借出色的性能与功耗表现,在国内云计算市场赢得了良好的口碑。随着新基建和信创产业的推进,很多行业和企业都开始考虑选择鲲鹏平台补充甚至替换原有的 x86 服务器;以鲲鹏处理器为核心,包括芯片、整机、操作系统、云平台、行业应用等自主技术在内的一整套 IT 基础设施逐渐浮出水面,形成了一个蓬勃发展的鲲鹏产业生态。
如今,华为已在全国各地建设了十几个鲲鹏产业发展和创新基地,并与各省市政府合作全力推进鲲鹏计算产业的发展。此外,华为还在各地举办了一系列鲲鹏开发者沙龙活动,向各地 IT 从业者介绍鲲鹏产业细节,源源不断地输出鲲鹏平台迁移和应用部署经验,努力打造一个充满活力的鲲鹏开发社区。
7 月 24 日,“八桂鲲鹏 乘风破浪”广西鲲鹏开发者沙龙在广西南宁成功举办。本次沙龙围绕鲲鹏生态和鲲鹏产业整体现状与未来规划进行了解读,并由华为专业工程师分享了鲲鹏迁移课程,还邀请到产业合作伙伴分享了国产数据库的最佳实践。此外,活动现场还举行了广西鲲鹏训练营暨鲲鹏应用开发者大赛颁奖仪式,介绍了华为鲲鹏开发者大赛的细节内容。
本文由 InfoQ 编辑整理自鲲鹏开发者沙龙南宁站速记。
鲲鹏产业生态战略解析
华为 18 万人的共同追求,就是把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。
这是华为鲲鹏凌云伙伴计划总监刘徐平在本次沙龙上《鲲鹏展翅,共赢计算新时代》的主题分享中的开场白。接下来,刘老师就为大家介绍了鲲鹏计算产业的现状与未来规划。
从蒸汽时代、电气时代再到信息时代,人类社会前进的动力也从热力、电力演变到了通用算力。今天的世界正在进入由 AI 算力推动的智能时代,万物互联将成为现实,IT 行业需要应对海量数据与海量分析的挑战,进而产生了海量的算力需求。

由于近年来芯片领域进步放缓,华为认为未来十年将是计算架构创新的黄金时代,这样才能满足智能世界的算力发展需要。因而其投入庞大资源打造了鲲鹏和晟腾两大关键芯片技术。前者相比主流 CPU 有 25%的性能优势和 30%的能效比优势,后者则相比主流单卡性能翻倍。
为了推进鲲鹏产业快速发展,华为开放了主板等硬件组件,允许合作伙伴自由开发自有品牌服务器和 PC;还在软件层面开发了 AI 框架和数据库等底层技术,上层应用则完全交给合作伙伴创建,免费支持他们进行软件迁移。此外,其还对业界主流的开源软件和国产软件进行适配,方便合作伙伴更快捷地展开迁移工作。

“未来五年,华为计划投入 15 亿美元发展鲲鹏生态,包括高校教研扶持计划、沃土开发人员成长计划、初创企业扶持计划和合作伙伴发展计划,并与各地方政府合作打造区域产业。”刘徐平就鲲鹏生态的未来规划进行阐述。
同时,他还提到,华为计划在五年内培养一百万名鲲鹏开发者,为此进行了五方面的规划:首先是华为的伙伴 MVP,主要授予行业意见领袖;第二是华为云联盟杯开发者大赛;第三是针对移动应用提供的扶持和活动;第四是开发者沙龙活动;第五部分是华为 HC 大会,也是业界最具影响力的技术峰会之一。他表示,华为希望通过这一系列开发者活动帮助开发者成长,并获得能力和资源。
产业联盟伙伴分享:国产数据库最佳实践
作为信创产业的关键领域,高端数据库的国产化替代是当下国内 IT 基础设施领域最热门的主题之一。本次沙龙上,达梦数据库华南大区技术总监胡青李以鲲鹏产业联盟伙伴的身份,分享了国产数据库方案的一些最佳实践,为准备采用国产数据库的开发者和企业提供了颇具价值的实用参考。
国产数据库迁移方案解析
当达梦接到客户的数据库向鲲鹏平台的迁移需求时,通常会从方案设计入手,经过应用开发和性能优化环节完成迁移任务。
调研是迁移工作的核心部分,占据方案设计 60%甚至 80%以上的时间。在场景分析中需要调研应用系统和数据库两个层面,具体如下图:

之后还要做目标分析,主要考虑下图中的 6 大维度:

需要注意的是,当 CPU 多核能力和内存不成瓶颈时要注意存储的性能,如果原始系统性能太差,就要对当前业务模型进行深入分析再做设计。另外要根据生产系统的工作时间习惯来选择迁移时间和手段。
应用开发环节中,核心问题是集群架构设计和优化方式。如果业务系统要向鲲鹏迁移,需要注意的是 JDK 应换为 Open JDK。应用迁移完成后要做数据核对,还要有单点和高负载性能测试。根据用户的具体需求,可能需要下线迁移、短时间下线迁移或不下线迁移。

优化环节是真正的难点,需要利用索引和统计信息来做好优化工作。另一个难点是集群性能优化,包括性能优化、高可用优化和数据流优化。
在实践中,达梦帮助用户做到了平滑过渡到鲲鹏平台上,这一过程中需要注意的是磁盘配置方式,以免 IO 性能不符合预期。迁移完成后成功上线,达梦还提供了统一的管理平台来管理各种集群,查看各种可回溯的监控指标。所有监控数据都可以发给 Prometheus,监控内容非常详细。
鲲鹏软件迁移指南
本次沙龙上,华为鲲鹏计算专家还带来了鲲鹏软件迁移的速成课程。
鲲鹏软件迁移概述
计算机硬件底层是包含大量晶体管的芯片,而上层的软件就是用高级语言编写的应用程序。高级语言通过编译器编译成汇编语言,再通过汇编器生成机器码。机器码主要包括指令和数据,而指令则与底层芯片的设计高度相关,不同的平台有着不同的指令集,如 x86、Power、ARMv8 等等。
鲲鹏芯片所使用的 ARMv8 指令集与 Intel、AMD 的芯片所使用的 x86 指令集区别很大,下面就是一个例子:

由于指令集层面的差异,因此在 x86 平台上运行的应用程序转移到鲲鹏平台上时就需要重新编译,整个过程就叫做软件迁移。
根据过往的经验总结,软件迁移可以归纳为迁移准备、迁移分析、编译迁移(包括代码和软件包迁移、性能调优、测试和认证五大步骤。
1、迁移准备:主要收集软硬件信息,包括芯片和服务器资料,操作系统、中间件、编译器、业务软件等信息。接下来,鲲鹏开发者可以申请 openlab 远程编译环境来为迁移做准备。
2、迁移分析:主要分析软件栈,制定迁移策略。分析过程分为业务软件和运行环境的展开分析两大类。

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

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

5、测试与认证:测试环节主要涉及功能测试、性能测试、场景稳定性测试等,保证迁移完成后的软件可以满足规模化生产环境的各项指标。华为还提供了鲲鹏展翅认证计划,为完成迁移工作的合作伙伴提供认证服务。
值得一提的是,华为还开发了一系列开发套件,帮助开发者完成整个迁移任务。套件中包括分析扫描工具、代码迁移工具、性能优化工具等。
C 和 C++代码迁移
C、C++和 go 都是典型的编译型语言。这种语言开发的程序需要经过针对硬件平台的编译后才能在对应平台上运行。当 x86 平台的 C/C++程序要向鲲鹏平台迁移时,针对 x86 平台编译生成的二进制文件是无法直接在鲲鹏平台运行的。

C/C++代码的编译构建过程
C/C++代码工程主要包括如图所示的两类文件:

需要注意,不同的项目需要编译移植的部分是不同的,有些项目可能无需修改代码即可直接编译通过,有些只需要简单的编译选项调整,其他项目就可能要对代码做较大改动。
C/C++代码的编译构建可参考以下流程:

C/C++代码迁移的典型移植问题
1、编译脚本、编译选项移植
以编译 64 位应用程序为例,x86 平台可通过指定编译选项为 -m64 来完成,而在鲲鹏处理器下需要 -mabi=lp64 的形式指定;在 X86 平台下默认 char 类型是有符号类型,鲲鹏平台下默认是无符号类型。
2、编译宏移植
以编译器自定义宏为例,x86 编译选项是 x86_64 或 __x86_64,对应的 ARM 编译选项是 aarch64。
3、builtin 函数移植
以替换 crc32 值计算函数为例,x86 下的 __builtin_ia32_crc32qi () 对应到 ARM 中则为 __builtin_aarch64_crc32cb()。实际上,需移植的普通 builtin 函数实际并不多,大部分需移植的 builtin 函数集中在 SSE intrinsic 函数内。
4、内联汇编函数移植
这是 C/C++ 代码迁移过程中较难的部分,做移植前需先找到核心的汇编指令,随后结合内联汇编规则,也能够快捷的完成替换移植。
5、SSE 函数移植
SIMD 是一种单指令处理多数据流的并行处理技术,能够在批量数据操作时进行向量化加速,具有较高的执行效率,应用比较广泛。x86 平台的 SIMD 扩展指令集分为 MMX、SSE 和 AVX 几类,位宽从 64-512 位。鲲鹏平台的 SIMD 指令集是 NEON,也有一些开源库可用。下面分别是 MMX/SSE/AVX 几种指令的迁移示例:
迁移过程中,一般使用 AVXtoNeon 和 SSEtoNeon 两个开源工程来迁移 intrinsic 函数。如果存在它们没能覆盖的部分就需要手动替换。

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

Java、Python 代码迁移
Java 的代码迁移过程如下:

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

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

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

JVM 参数要根据业务实际情况来灵活调整。
Python 的代码迁移过程如下:

Python 代码向鲲鹏平台迁移时,针对含 C 或全 C 模块的迁移,核心都是对调用的 SO 库进行重编译,过程如下:

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

远程软件仓一般基于 x86 架构,下载的 jar 包无法直接用在鲲鹏平台上。此时需要扫描软件依赖库,找出对应的 SO 库进行重编译和替换,之后重新构建项目直至不包含 x86 依赖项。
华为使用积累的 jar 包移植构建了鲲鹏的 Maven 软件仓,帮助开发者快速移植。为了让项目在编译时优先搜索这个仓,需要对搜索顺序做配置。

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

无法获取支持鲲鹏平台的 rpm 包时,就需要对 x86 包进行重构或下载源码自行编译安装。
在重构 rpm 包时主要分为下图中四个阶段:

这个过程可以使用鲲鹏的 Porting Advisor 开发工具辅助。它可以自动扫描软件包,自动从 Maven 软件仓下载依赖项并打包。但如果 Maven 上没有所需的依赖项,则依旧需要手动编译和打包。
鲲鹏应用创新大赛(2020)广西赛区介绍
为激发行业创新、促进人才培养、加速产业融合,全国各鲲鹏生态创新中心联合举办了鲲鹏开发者大赛,正在面向全产业开发者开放报名通道,共同打造鲲鹏全栈解决方案,实现技术与商业创新应用。本次沙龙特别邀请到了中国-东盟信息港鲲鹏创新中心 COO 杨富强,为与会者介绍华为鲲鹏开发者大赛的具体内容。
2020 年鲲鹏开发者大赛是全国性赛事,分为 13 个赛区,各赛区第一名将代表本区域参加全国赛。作为 13 大赛区中的一环,广西赛区于 7 月 1 日启动报名,最终提交作品时间为 8 月 15 日,21 日决出胜负,8 月 24 日参加全国总决赛。总决赛胜出者将获得在上海举办的全球 HC 全连接大会上颁奖的荣誉机会。
广西赛区设置“金融”“政府”“大数据”“ARM 原生应用创新”和“开放命题”五大赛道,奖项激励总额最高达 50 万。各赛题奖项一致,按阶梯式进行奖励,详情如下:
(1)报名队伍数在 5 支以内(含 5 支)的赛题:分别选出优胜队伍 1 名,团队奖励 3 万奖金;
(2)报名队伍数在 6-10 支(含 10 支)的赛题:分别选出优胜队伍 2 名,第 1 名团队奖励 3 万奖金、第 2 名团队奖励 2 万奖金;
(3)报名队伍数在 10 支以上(不含 10 支)的赛题:分别选出优胜队伍 3 名,第 1 名团队奖励 5 万奖金、第 2 名团队奖励 3 万奖金、第 3 名团队奖励 2 万奖金。
每个赛道的冠军将会被推举参与全国赛事。全国共有 7 个赛道,还包括 openEuler 开源系统迁移和商业应用迁移两大赛道。每个赛道全国 13 支队伍角逐前三名,第一名奖励 20 万元+价值 10 万元的云资源,第二、三名为 10 万元+价值 5 万元云资源。
获奖队伍还会受邀参观华为松山湖基地,并推荐为"华为云 MVP"个人品牌,获得参加全连接大会的往返机票。获奖企业可以获得"联合举办专场鲲鹏技术沙龙"的机会,其方案将在下半年的 100 余场鲲鹏技术沙龙中获得宣讲议题,用于推广企业方案。华为还会为获奖企业免费录制和推广宣传视频,金奖作品有机会在全连接大会上展示。
参赛队伍要取得好成绩,需要注意以下几点:
1、选好作品,解决方案应该足够成熟、应用广泛、有鲜明特色;
2、软件适配鲲鹏平台时要改造彻底,并根据鲲鹏架构做针对性改进和创新;
3、需要准备完整的测试报告,展示报告中要清晰展示方案的架构、功能、价值、前景和优势等要素。
关于参赛队伍的要求,每个单位可以派出多支队伍,每个队伍可以参与多个赛道,每个赛道也可以提供多个作品参赛。唯一限制的是队伍人员,每支队伍最多 5 人。
即便参赛后没有获奖,华为也针对已完成适配的解决方案提供了每个产品 3 万元的激励,需要产品技术和商业价值评估达到目标,如果完成鲲鹏商业化部署更佳。企业每年可以申请三次这一激励,最高获得 9 万元奖励。
本次大赛时间安排如下,参赛信息可访问链接具体了解。
评论