应用移植鲲鹏平台却无从下手?这篇文章帮你全搞定!

王强

2020 年 8 月 05 日

应用移植鲲鹏平台却无从下手?这篇文章帮你全搞定!

在年轻一代程序员心目中,x86 和 ARM 两大架构分别是桌面计算和移动计算的代名词。它们在各自的领域呼风唤雨,彼此却井水不犯河水,仿佛有一面无形的墙壁矗立其间。


在高速发展的技术冲击下,这面无形之墙终于摇摇欲坠。今天,多家厂商开发的 ARM 架构服务器 CPU 已经在性能、功耗和成本方面赶上了最新一代的 x86 竞品,很多场景下甚至有更出色的表现。华为公司的鲲鹏处理器就是其中的典型代表,其发布一年多来获得了国内众多政企客户的青睐,开始在服务器和云计算市场上冲击 x86 的固有份额。


在鲲鹏平台的崛起之路上,最大的障碍并非硬件本身的能力,而是软件层面的生态差距。为了尽快扭转这一局面,华为公司投入了大量资源来建设鲲鹏平台的生态,与众多合作伙伴一起探索和推动鲲鹏平台的软件迁移和优化工作,帮助更多客户向鲲鹏平台无缝过渡。鲲鹏应用创新大赛就是华为一系列努力中的一个环节,旨在激发行业创新,促进人才培养,加速产业融合,为鲲鹏生态的崛起打下牢固基础。


8 月 1 日,鲲鹏应用创新大赛陕西赛区宣讲会在西安华为联合学院成功举办。本场宣讲会带来了鲲鹏软件性能调优与工具套件和技术支持的课程,并从多个维度深入讲解了 2020 年度鲲鹏应用创新大赛的细节,帮助西安赛区的小伙伴们了解更多鲲鹏平台的技术背景知识,为鲲鹏大赛做好准备工作。


本文由InfoQ编辑整理自鲲鹏应用创新大赛陕西赛区宣讲会速记。


本场宣讲会的重磅内容是华为鲲鹏计算软件迁移工程师钟海鹏带来的题为《鲲鹏软件性能调优 &工具套件与技术支持》的深度技术分享,帮助开发者了解如何在鲲鹏平台上打造具备商业竞争力的解决方案。


鲲鹏平台迁移调优面面谈


性能调优是软件行业永恒不变的一大主题。近年来被广泛引用的一个例子是两位图灵奖获得者针对一个 Python 实现所做的优化,通过改用 C 语言和一些调优技巧,应用运行速度提升了上千倍之多;在此基础上,华为鲲鹏团队又针对鲲鹏平台的硬件特性做了进一步改进,最终实现了 3 万倍的提升。由此可见,软硬结合的性能调优可以带来巨大的性能改善,是软件开发人员需要重视和学习的关键领域之一。


根据冯诺依曼架构的特点,性能调优的四大方向分别是 CPU/内存、磁盘、网卡和应用自身的硬件关联调优。


CPU/内存


在鲲鹏平台上,针对架构特点主要有软硬两类加速方式。软加速的第一种类型是编译优化,主要包括指令布局、内存布局和循环优化等,在代码编译时调用相应的编译器选项即可启用。鲲鹏推荐开发人员使用 JDK 1.8 及以后的版本也是为了较好的编译优化支持。


NUMA 亲和性优化是鲲鹏架构的优化要点。鲲鹏处理器采用了 NUMA 多核架构设计,处理器的几十个核心被分为几组,每组都有自己的内存控制器,各组控制的内存之间不保证一致性。从任意一组核心上访问其他几组核心的内存时延迟都会大幅增加,且访问不同组的内存延迟也有区别。



针对这种多核架构优化时,最佳的方式就是让运行在某组核心上的进程与该组核心使用的内存绑定,亦即 NUMA 亲和性优化。以 Nginx 为例,进行相关优化后可以获得 20%左右的性能提升。


硬加速优化主要指利用鲲鹏处理器的硬件加解密引擎等技术提升相关运算的性能。再结合 ARM 的 Neon 向量指令,就可以实现软硬协同的加速优化。鲲鹏平台提供了九大加速库,可以在相关场景中实现 10%-100%的性能提升。


硬盘和网卡


应用程序的硬盘优化主要与文件预读取相关。文件预读取并不是总能带来性能提升的,很多场景中文件预读会导致不需要的数据被预取进缓冲区,使缓存频繁刷新,反而可能拖累性能表现。因此是否开启预读需要根据应用的具体情况来做判断。


网卡优化方面,主要考虑的是网卡延迟和吞吐指标的权衡。开发人员需要使用 frames 和 usercs 两个参数来调整网卡的中断聚合,中断频率下降会增大延迟但提升吞吐量,反之则会减小延迟并降低吞吐量。这里具体选择怎样的平衡点也需要根据具体的应用场景做针对性调整。


软件应用


鲲鹏处理器的核心数量比市面常见的 x86 处理器多很多,因此针对鲲鹏平台的软件应用优化经常要重点考虑并行性指标。软件的并行能力并非越大越好,如果并行性提升遇到并发锁等待反而可能降低吞吐量,这时就要用到大锁变小锁、无锁编程、原子操作等来做改进。内存对齐方面,x86 的 Cacheline 是 64 字节,鲲鹏则是 128 字节,也需要在优化时做针对处理。


案例分析:MariaDB


以 MariaDB 向鲲鹏平台的性能调优为例,调优工作的第一步是监控。开发人员需要利用各类 CPU、内存等监控工具获取应用的资源使用状况,分析性能瓶颈的位置。在 MariaDB 的例子中,CPU 利用率接近 100%,硬盘、网卡并没有太高使用率,而且软件并发线程数增加到 64 之后性能不升反降。由此可见 CPU 是主要的性能瓶颈。进一步分析会发现并发数增长后 CPU 在锁上花费大量资源,因此需要控制并发数、调整原子操作等来优化。由这个案例可看出,调优的整体思路就是先采集分析性能数据,之后针对相关瓶颈具体优化。为了发挥软件性能还要充分压榨硬件资源,并在延迟、吞吐和并发等指标上找到平衡点。


从工具套件到技术支持:鲲鹏社区入门解析


鲲鹏社区是鲲鹏平台开发人员的好帮手,其中整合了数百个案例指导、众多常用软件、鲲鹏论坛和认证查询等模块。开发人员还可以直接使用鲲鹏小智 AI 助手查询兼容软件、镜像包、汇编指令、项目案例、常用工具和故障问题六大知识点。


华为公司针对鲲鹏平台推出了三大开发套件,首先是分析扫描工具 Dependency Advisor,用于扫描待迁移应用的依赖项,报告可能的不兼容问题;然后是代码迁移工具 Porting Advisor,给出代码移植修改点及指导报告;最后是性能优化工具 Tuning Kit,负责分析性能指标、定位热点函数和瓶颈,并给出优化建议。


在兼容软件查询入口,开发人员可以查询已经兼容鲲鹏平台的开源软件、商业软件和操作系统的相关信息。开发社区的各个入口汇总如下:



鲲鹏应用创新大赛深度讲解


本场宣讲会上设置了多个环节介绍鲲鹏应用创新大赛的细节,包括参赛规则、评审打分规则与参赛队伍代表演示等,具体内容汇总如下:


参赛及打分规则


2020 年鲲鹏应用创新大赛分为区域赛和全国赛两阶段,区域赛在全国分为 13 个赛区,陕西赛区方案提交截止日是 8 月 15 日。之后在 8 月 21 日举行陕西赛区线下答辩,每支队伍约 20 分钟时间,一般 10 分钟介绍产品,5 分钟演示,5 分钟答疑。


区域赛的各个赛区赛题冠军进入全国赛,经过半决赛和总决赛决出金奖和银奖,金奖获得者将受邀参加华为 HC 全球大会,有机会向世界展示自己的作品和企业。


陕西赛区总奖励金额 42 万元现金,分为政府、大数据、ARM 原生应用、开放命题共四个赛题,各赛题奖项一致,详情如下:


一等奖:4 个团队(每赛题 1 个团队),每团队奖励:50000 元现金。


二等奖:4 个团队(每赛题 1 个团队),每团队奖励:30000 元现金。


三等奖:4 个团队(每赛题 1 个团队),每团队奖励:20000 元现金。


全国决赛共有 7 个赛题,各评选 1 个金奖和 2 个银奖,金奖获得 20 万元现金+10 万元云代金券,银奖获得 10 万元现金+5 万元云代金券。获奖者还有联合举办专场鲲鹏技术沙龙的机会,可在沙龙专设议题,推广企业和解决方案;华为会为获奖方案免费制作宣传视频,多渠道予以曝光;陕西赛区队伍进入全国赛获奖后,作品还会在陕西鲲鹏生态创新中心展示,获奖选手还会获推“华为云 MVP”,打造个人品牌。


参与大赛的前提条件是已获得鲲鹏适配认证,或在线输出测试报告。每支参赛队伍最多 5 人,一家企业允许多支队伍、多个作品参赛。作品需要包含以下内容:


1、公司、团队及作品简介


2、行业背景趋势即解决的痛点(必选)


3、基于鲲鹏的作品介绍(必选)


4、技术亮点及优势(必选)


5、商业模式及市场前景(必选)


6、案例介绍(可选)


评委在评判作品质量时,主要根据上述六方面的表现进行评分。优质作品应该根据本行业的发展趋势,基于鲲鹏平台和鲲鹏云服务来针对某个或某几个痛点给出解决方案。方案中加入昇腾元素或其他华为软硬件元素是加分项。


参赛队伍介绍方案时应该避免夸张宣传,尽量挖掘鲲鹏平台自身的亮点,强调这些亮点在解决方案中发挥的作用。除了鲲鹏处理器外,作品也可以充分利用鲲鹏云服务中与 CPU 架构无关的项目打造方案。优质作品还应重点考虑安全性主题,在方案中有效利用华为云的安全防护技术。


参赛队伍代表演示


宣讲会上,大赛云基华海队伍还带来了自己的作品展示:云派防疫信息智能登记系统。这是一套在陕西榆林实际落地的项目,在疫情期间发挥了作用。系统解决了人员登记电子化、信息准确和真实性、信息追踪三大需求痛点。



该系统底层基于华为鲲鹏云服务,使用 B/S 架构,处理数据量不少于 100 万,响应速度低于 2 秒,并有一套安全控制和数据加密机制。整套系统初期基于 x86 架构,上线运行后移植到了鲲鹏服务器平台上。系统最底层使用了鲲鹏的服务器存储和网络,以及一些运维管理和监控功能;填报信息的部分使用了华为 OBS 存储,并利用华为的 AI 识别处理身份证照片。此外,系统还使用了华为 ELB、华为云 ECS、华为云安全服务等。解决方案的三个产品得到了鲲鹏认证证书。作为参赛队伍中的优秀代表,云基华海的作品为其他队伍提供了一个很好的参考和榜样。


以上就是本次鲲鹏大赛陕西宣讲会的内容。陕西区域赛的作品提交截止至 8 月 15 日,有兴趣的企业需要抓紧时间,在截止日期前拿出最好的方案提交参赛,早期报名的队伍还有机会分配到技术老师进行指导。点击链接进入报名通道 &获取更多赛事详情。


2020 年 8 月 05 日 16:131299

评论

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

架构师训练营第一期-第九周学习总结

卖猪肉的大叔

架构师训练营第五周作业

邢永春

JPA-技术专题-JPA&Hibernate注解

李浩宇/Alex

【架构师训练营 1 期】第九周作业

诺乐

架构第九周作业

Geek_Gu

极客大学架构师训练营

架构师训练营 - 第 9周课后作业 - JVM 垃圾回收原理

树森

架构师训练营 - week09 - 作业

lucian

极客大学架构师训练营

第五周作业总结

hunk

极客大学架构师训练营

Architecture Phase1 Week9:HomeWork

phylony-lu

极客大学架构师训练营

架构师训练营第九周命题作业

一马行千里

学习 极客大学架构师训练营

第 8 周 996日记

Pyr0man1ac

架构师训练营 - week09 - 学习总结

lucian

极客大学架构师训练营

第 9 周 997日记

Pyr0man1ac

架构师训练营 - 第九周

袭望

第五周总结

jizhi7

极客大学架构师训练营

第 05 周学习总结 [架构师训练营第 2 期]

Airship

极客大学架构师训练营

第九周作业

文智

极客大学架构师训练营

【架构师训练营 1 期】第九周学习总结

诺乐

第 8 周 作业

Pyr0man1ac

Week5 一致性Hash

evildracula

学习 架构

架构第九周总结

Geek_Gu

极客大学架构师训练营

架构师训练营第二期 第5周总结

月下独酌

极客大学架构师训练营

第九周作业(作业二)

Geek_83908e

架构师一期

Architecture Phase1 Week9:Summarize

phylony-lu

极客大学架构师训练营

架构师训练营第 2 期 第五周作业

月下独酌

极客大学架构师训练营

第九周总结

熊桂平

第 9 周 作业

Pyr0man1ac

架构师训练营第五周学习总结

邢永春

第9周作业

paul

架构师训练营第九周学习笔记

一马行千里

学习 极客大学架构师训练营

第九周作业

熊桂平

极客大学架构师训练营

应用移植鲲鹏平台却无从下手?这篇文章帮你全搞定!-InfoQ