2020 年被称为是 ARM 架构的元年:在 HPC、服务器和 PC 领域,富士通、亚马逊和苹果公司均取得了标志性的突破,展现了 ARM 平台强大的发展潜力。在国内,华为鲲鹏处理器也以优异的表现博得了业界的好评。随着 5G、AI 和云服务产业的兴起和成熟,ARM 正在凭借移动计算浪潮中积累的市场优势,向多年来一直由 x86 把持的传统计算市场进军,有望在这些领域成为下一个十年的舞台主角。
任何硬件技术的崛起都离不开软件生态的配合,ARM 也不例外。如今,华为在努力围绕鲲鹏计算产业生态,建设以服务器和云端应用为主要场景的开发社区,并成功吸引了成千上万开发者的关注和参与。在华为公司的推动和全球开发者的支持下,年轻的鲲鹏社区生机勃勃,优秀的开源项目和应用实践和不断涌现,成为了服务器和云端市场不可忽视的新生力量。
7 月 11 日,华为在全国 18 城举办了鲲鹏创新中心开发者创享日活动,为鲲鹏计算产业生态建设添砖加瓦。在本次活动中,深圳会场请到了华为公司多位资深专家,为开发者介绍鲲鹏计算产业生态的概况,以及迈入鲲鹏生态时最关心的软件迁移和优化相关内容;活动最后还有鲲鹏应用创新大赛深圳区域赛的相关信息。
以下内容经由 InfoQ 编辑整理自开发者创享日深圳会场的课程。
鲲鹏产业源头创新中心和鹏城生态:开发者云平台介绍
在全球科技领域激烈竞争和贸易冲突的背景下,中国 IT 产业亟需有竞争力的自主创新芯片、数据库和操作系统产业链。华为公司经过 15 年的发展,自主开发出了鲲鹏 920 服务器芯片、昇腾 AI 芯片、OpenEuler 服务器操作系统、GaussDB 数据库、MindSpore AI 框架等关键核心技术,初步形成了服务器和云端市场的高水平自主生态系统。
去年 9 月,深圳市人民政府与华为技术有限公司签署联合打造全国鲲鹏产业示范区战略合作协议,共建鲲鹏产业源头创新中心,为鲲鹏生态伙伴提供鲲鹏云资源、技术支持、联合创新、标准制定、测试认证、人才培养等公共服务,加快深圳市鲲鹏生态体系规划布局,打造全国鲲鹏产业示范区。华为云解决方案架构师鄢强介绍,鲲鹏产业源头创新中心为合作伙伴提供七大权益:资源补贴、证书资质、市场推广、品牌宣传、技术支持、人才培养、政企对接,目的是帮助合作伙伴实现智能化、数字化转型。在创新中心的帮助下,至今已有多家合作伙伴借助华为云鲲鹏云服务实现了业务改进和优化,形成了良好的示范效应。
与此同时,鲲鹏产业源头创新中心还和鹏城实验室“鹏城生态”项目组多次交流。鹏城实验室作为 ARM+Linux 生态建设的先行者,在这方面具有丰富的经验。“鹏城生态”意图打造国内最大,要素最齐全的 ARM+Linux 生态环境。开发者云平台是“鹏城生态”重要组成部分,作为种类最全的 ARM+Linux 服务平台,正在为粤港澳、北京、长沙等多地用户提供 ARM+Linux 生态的应用服务。开发者云平台为用户提供物理机、虚拟机、云存储等服务,芯片包含了鲲鹏 916、920 等,操作系统覆盖麒麟、OpenEuler、Ubuntu、CentOS 等,可以为开发者提供高性能计算、分布式存储、大数据处理和机器学习等解决方案,以及开箱即用的云手机软件栈和深度学习软件栈。
鹏城实验室工程师张晓梨介绍,开发者云平台向所有人免费开放,所有环境都可以远程访问。平台上有开发者社区,支持应用上传,并为个人和企业开发者提供了展示和交流的窗口。平台的云手机软件栈兼容安卓应用通过轻量级虚拟化技术支持移动 OS 运行;深度学习软件栈则基于 ARM+Atlas 架构,支持开发多种类型的人工智能应用。
鲲鹏软件性能调优
在任何硬件平台上,软件想要充分发挥硬件的实力都必须做好性能调优工作。很多时候,软件优化带来的性能收益甚至远远超过了硬件算力提升的水平:
基于冯诺依曼架构的计算机分为 CPU、存储器和输入/输出设备几大部分。其中,CPU/内存、磁盘、网卡和应用是计算性能优化时主要考虑的四个方向。华为计算产品部软件迁移调优高级工程师陈龙分别讲解了华为云鲲鹏云服务在这几个方向上的软件调优要点。
CPU/内存
CPU/内存部分有软加速和硬加速两大模块。其中,软加速主要涉及编译、JDK 优化和 Numa 优化。
编译优化主要包括指令布局、内存布局、循环和除法优化等,都是为了让软件代码更好地配合 CPU 硬件的设计特性。JDK 优化主要涉及 JIT 和 GC 的针对性提升。基于鲲鹏云服务,华为推荐使用华为 JDK 和 Gcc 9.1 以上版本的编译器,以获得最佳的优化效果。
鲲鹏服务器芯片的一个关键设计理念就是 NUMA 多核架构。相比众多内核统一访问内存的 SMP 多核架构,NUMA 架构中不同的内核访问内存的速度可能是不一样的,如图所示:
如果一个进程调用了 NUMA CPU 中 node1 的核心资源,那么当这个进程需要访问 node2 的内存块时,就需要更高的延迟并导致性能下降。为此,应用在优化时就要尽可能避免这种情况,尽量让进程只访问速度最快的内存块,这种方法也叫亲和性设置。
亲和性设置有三种主流方法可选,第一种是使用系统工具 numactl,将具体的核心按编号绑定到进程上;第二种是将亲和性设置参数硬编码到程序中;第三种是调用开源软件配置文件中的亲和性参数设置。
除此之外,华为还为鲲鹏提供了一些加速库,提供类似 x86 平台上流行加速库的效果:
这些加速库会自动为应用选择合适的软硬加速路径,有条件时就调用鲲鹏芯片的硬加速模块(以加解密引擎为主),提供很高的加速比。
磁盘/网卡/应用
在磁盘性能优化方面,影响较大的是文件系统的选择。华为推荐在鲲鹏平台上使用 Ext4 和 XFS 文件系统,并针对大数据场景开启文件预读来提升性能。
在网卡端,主要需要根据实际应用场景来调整 frames 和 usecs 两个特性,根据延时和带宽需求来权衡控制两个参数。
在应用侧,开发者可以提高并发数、优化缓存操作、启用异步读写等,针对鲲鹏平台的系统特性进行整体配置。
在具体的性能调优实践中,第一步就是选择调优方向,包括三大块硬件和应用;第二步是性能采集、分析性能瓶颈、定位热点函数;第三步是针对平台特性充分利用硬件资源;最后还要在网络端寻求合适的参数平衡点。
ARM64 平台上 Hadoop 及 Hive 集群环境调优
麒麟软件服务器资深工程师王华功回顾了 2018-19 年,华为在国产数据库上搭建 Hadoop 环境的实践案例。这一课题使用的硬件是三台 TaiShan2280 服务器,基于鲲鹏 916 64 核心 ARM 芯片,具体配置环境如下:
在 TPC 测试中,使用 75G 大小的 lineitem.tbl,通过 Hive 加载进 hdfs 计算 Hadoop 集群的吞吐量。
优化措施
Hadoop 的负载压力主要集中在 CPU、网络、内存和磁盘几个方面,它们也是本次优化工作的重心。优化工作可分为 5 个步骤。
第一步是在 ARM 平台下重新编译 Hadoop,主要目的是将一些针对 x86 编写的原生库移植到 ARM 上,提升性能;
经过对比,选择了 Hadoop 环境中表现最好的 Oracle JDK;
数据节点改用 SSD 来提升 HDFS 分布式文件进程的性能。
调整 mount 参数和操作系统配置,禁用透明大页压实功能和内存交换;
调整 Hadoop 参数,针对服务器大内存环境调整线程运行时,调整网络参数等。
一些相关参数如下:
经过上述一系列调优工作,整个集群的 IO 吞吐量也得到了很大程度的提升:单节点吞吐量由 220MB/s 提升到 306MB/s,两节点达到近 500,三节点来到了 764。
王老师总结说,后续的调优工作要考虑到网络交换机的参数,还要考虑 Hadoop 的不同版本性能差异。具体的调优参数要根据应用和环境的不同来做针对性调整,凭借自己的经验和理论知识来权衡控制。
鲲鹏服务器上的云原生应用优化实践
所谓云原生应用,就是在云端直接运行原本跑在客户端上的应用,从而提供云手机、云办公、云直播、云游戏等全新的服务形式。对 AL(ARM+Linux)生态而言,云原生应用可以将数以千万的安卓应用无损迁移到 AL 上,极大丰富后者的应用生态,缩小其与 x86 桌面生态的差距。
鲲鹏服务器的云原生平台架构基于 Robox+Anbox,上面运行一个标准的容器云平台,并通过投射协议投射到各个客户端上。
鹏城实验室工程师周军提到,鲲鹏云原生平台主要基于开源项目,但在产品化的过程中遇到了很多问题。在调优过程中需要一一解决。
首先是兼容性问题,需要保证绝大多数安卓应用不经修改就能运行在鲲鹏平台上;其次是提升并发能力,在一台服务器上运行更多安卓实例来降低成本;第三是提升系统流畅度,降低网络延时,提升画面清晰度,比拟真机使用效果。
兼容性
在这个方向上,主要处理的是原生 Robot 方案支持的 OpenGL ES 版本过低的问题,并为安卓设备常见的各种传感器提供仿真模拟。
并发能力
为了尽可能提升单台鲲鹏服务器(64 核心)同时运行的云原生应用实例数量,有几个关键点需要注意:
首先是充分利用 GPU,将 CPU 从一些繁重的渲染/编码任务中解放出来,使得每个实例占用的核心数量大幅减少;
其次是限制容器内可建的 CPU 数量,防止应用过分索取 CPU 核心资源。
根据单台主机实际需要的线程数量扩大默认配置。
为应用实例建立退出机制,防止应用在后台一直占用资源。
针对鲲鹏芯片的 NUMA 架构进行优化。
根据实际应用场景选择合适的容器核心数量。
提升系统流畅度
云原生平台需要将虚拟的安卓系统的运算数据编码成视频流传送到客户端,因此对 GPU 侧的软硬件要求很高。需要注意的是,鲲鹏 NUMA 架构需要考虑 GPU 的绑定优化,避免增加 GPU 方面的延时。此外还要根据应用场景、显卡性能、显存特性等具体情况进行优化。
在调优思路方面,周老师给出了一个三步走的建议:
第一步是建立基准,找出系统的关键性能参数并评测出来;
第二是利用好工具,观察调优点的底层状态,定位具体的瓶颈加以改进
不要一次调整太多,而是每次只改一个参数,不断迭代来逐渐接近最优水平。
平台下一步的优化方向包括去掉转换层、通过分时复用提高伪并发数、通过 SSD 提升加载速度等。目前平台已经上线试运行,感兴趣的用户可以免费申请试用:
鲲鹏软件迁移
在这一部分,华为鲲鹏计算产品部软件迁移调优高级工程师唐启稳分享了鲲鹏平台的软件迁移思路和相关案例。
迁移流程
唐老师总结说,向新平台迁移软件时,首先要从官方文档入手,获取源码、查询依赖项和编译方法等。下一步是使用扫描工具扫描依赖项,找出闭源、无法移植的部分,考虑替换或屏蔽等手段。处理好依赖项后即可对整个应用进行编译移植工作。
迁移案例
首先是一个科学计算应用的迁移。原始应用主要依赖三个模块,其中 MPI 编译器和 MKL 加速库的迁移出现了障碍。MPI 使用的官方库与鲲鹏平台不兼容,因此最后改用了兼容的 Openmpi;MKL 是专门针对 Intel 芯片优化的数学计算库,参考社区案例后最终选择了用 Openblas 替换。解决这两个模块的迁移问题后,整个应用就很容易编译通过了。
第二个案例是 NiFi,一个基于 Java 的开源大数据工作流平台。在向鲲鹏平台迁移的过程中发现它的一个库只有 x86 版,没有 aarch-64 版。经过分析确认这个模块只在自动测试时会调用,不影响软件的整体功能,最后就对它做了屏蔽处理。
第二个案例是 Pandas 数据分析包。它基于 numpy 来解决数据任务,但在迁移过程中找不到 numpy 模块。经过分析,发现原来是安装的 numpy 版本号不匹配安装脚本要求,于是手动修改版本号解决了问题。
第三个案例是 OpenCV 迁移。迁移过程中遇到的问题时无法获取源码,原因是基于内网的迁移无法连接外网,于是手动下载了文件并安装编译。从这里看出,具体的迁移实践中网络故障也是需要注意的潜在问题。
迁移工具和社区资源
华为提供了一些常用的工具帮助开发者完成迁移工作,包括依赖项的分析扫描工具、代码迁移分析工具和性能优化工具等。开发者还可以访问鲲鹏社区来查找迁移经验文档,求助专家支持;在 OpenLab 知识库上可以找到兼容性列表和一些高频开源软件的迁移指导与安装手册。最后,开发者也可以使用鲲鹏小智搜索引擎提问,寻求帮助和资料。
2020 鲲鹏应用创新大赛深圳区域赛介绍
为促进鲲鹏行业解决方案孵化,加速区域生态发展,全国多地创新中心联合举办“鲲鹏应用创新大赛 2020”。本次大赛已于 7 月 1 日开启报名,总奖金池为 500 万元,开放 13 个区域赛和 1 个综合赛区,深圳区域赛——“鲲鹏凌粤·展翅鹏城 鲲鹏应用创新大赛 2020”由鲲鹏产业源头创新中心主办,设置了“金融”“政府”“大数据”“ARM 原生应用”和“开放命题”5 个赛题,面向具备软件开发背景和解决方案的企业参赛者,同一家企业允许多个不同解决方案的团队报名参赛。每支队伍人数不超过 5 人。各赛题优胜队伍(一等奖)将由鲲鹏产业源头创新中心推选参加 “华为开发者大赛 @鲲鹏应用创新大赛 2020”全国赛。
比赛时间安排如下,具体参赛信息可点击链接访问。
评论