极具“杀伤力”的性能调优,从几个思路说起

在应用程序部署到服务器上以后,可能会出现 CPU 占用率过高,I/O 吞吐量下降等性能问题,此时,就需要对程序进行优化。性能调优是一个比较复杂的过程,包括建立基准、压力测试、确定瓶颈、实施优化、确认优化这 5 个步骤。调优过程对程序员的知识结构要求非常高,需要非常熟悉硬件、操作系统 (OS\JVM)、应用程序等多个方面。

鲲鹏 920 处理器(兼容 ARM 架构)的整体设计思路就是通过“多核”获得强悍性能。具有更多的核数,2NUMA/Socket,L3 Cacheline 为 128 Byte。这些都是芯片的一些特性,这些特性对于性能调优也会产生不同的影响。

1 月 11 日,华为鲲鹏开发者技术沙龙 - 杭州站,来自华为的四位技术专家分享了四个议题,分别是—基于鲲鹏处理器的性能调优;鲲鹏大数据优化实践;A-Tune 自调优技术详解;iSulad 容器引擎分享与实践。议题分享结束后,紧接着就是最受大家欢迎的现场编码环节。华为技术专家现场演示并指导开发者进行实操。

参会者们合影留念

鲲鹏处理器的性能调优思路

第一位分享嘉宾是,华为智能计算高级工程师苏林。他指出性能调优是一个长期的过程,建议开发者们选择一个合理的性能调优平衡点,只有最合适的才能达到最好的性能。以鲲鹏处理器来说,对性能影响比较大的两个特性,第一个是 NUMA 架构,第二个是 L3 Cacheline。

鲲鹏处理器支持 NUMA 架构,通过适当的性能调优,既能够达成很好的性能,又能够解决 SMP 架构下的总线瓶颈问题,提供更强的多核扩展能力,以及更好更灵活的计算能力。

注意 Cacheline 伪共享,鲲鹏 920 和 x86 的 Cacheline 大小不一致,可能会出现在 X86 上优化好的程序在鲲鹏 920 上运行时的性能偏低的情况,需要重新修改业务代码数据内存对齐大小。X86 L3 Cacheline 大小为 64 字节,鲲鹏 920 的 Cacheline 为 128 字节。

华为智能计算高级工程师 苏林

鲲鹏处理器支持 NUMA(Non-uniform memory access, 非统一内存访问)架构,能够很好的解决 SMP 技术对 CPU 核数的制约。NUMA 架构将多个核结成一个节点 (Node),每一个节点相当于是一个对称多处理机(SMP),一块 CPU 的节点之间通过 On-chip Network 通讯,不同的 CPU 之间采用 Hydra Interface 实现高带宽低时延的片间通讯,在 NUMA 架构下,整个内存空间在物理上是分布式的,所有这些内存的集合就是整个系统的全局内存。每个核访问内存的时间取决于内存相对于处理器的位置,访问本地内存(本节点内)会更快一些。

NUMA 架构的特点

可以看到不同 NUMA 内的 CPU core 访问同一个位置的内存,性能不同。内存访问延时从高到低为:跨 CPU > 跨 NUMA 不跨 CPU > NUMA 内,因此在应用程序运行时要尽可能的避免跨 NUMA 访问内存,可以通过设置线程的 CPU 亲和性来实现。

NUMA 配置方法

系统的瓶颈判断,假如开发者不了解芯片,服务器怎么样去判断?从 CPU、内存、网卡、磁盘这四个模块,系统都为我们提供了一些工具进行性能分析。

系统的瓶颈判断

鲲鹏大数据优化实践

第二位分享嘉宾是,华为鲲鹏大数据解决方案高级工程师,程硕峰。他向开发者们介绍了鲲鹏大数据的完整生态,分享开源大数据平台 Ambari+HDP 组件的移植经验。最后介绍了鲲鹏开发套件(Kunpeng Developer Kit)可实现对海量代码进行快速扫描和分析,并提供专业的代码移植指导,以及移植后全面的系统性能分析与可视化呈现,从而极大提升软件开发者移植与调优效率。

华为鲲鹏大数据解决方案高级工程师 程硕锋

从下图可以看到,鲲鹏大数据生态非常完善,在大数据领域,各个方面都有了一定的支持,硬件部分,泰山提供了 TaiShan 2280 100/200 型服务器。芯片有鲲鹏的 916、920 芯片可供选择,通过 24 核、32 核、48 核、64 核来满足企业对不同算力的要求。大数据组件方面可以从数据源头到数据处理、存储都能够完美支持。当前支持的大数据平台有华为 Fusionlnsight,还有 Ambari,东方国信,美亚,他们将为大数据快速移植到鲲鹏平台上来提供支持。

鲲鹏大数据解决方案

为了将开源大数据平台 Ambari+HDP 组件移植到泰山,都需要移植什么内容?第一类是 Jar 包,有些 Jar 包含有 So,需要在鲲鹏平台重新编译。组件本身的 So 文件,需要重新编译。最后是可执行二进制文件,依赖底层的芯片架构,需要重新编译。具体分为四个步骤:

将 RPM 包分类,分为 X86_64 和 Noarch 两个类型

使用 checkSo 工具扫描 RPM

分析 RPM 包,查询得出得出安装需要的依赖软件,解压获取 rpm 中源文件、软链接,检查 /var/lib 等关键目录,对比安装前后新增的源文件、软链接。

构建 RPM 包

开源大数据平台 Ambari+HDP 组件移植经验总结

A-Tune 自调优技术详解

第三位分享嘉宾是,华为 2012 实验室高级工程师谢志鹏。性能调优代表着时间和成本的支出。工程师往往需要搭建测试工具找到瓶颈点,依靠人工巡检查找故障原因,安装多种监控工具,汇总分析数十个数据,期间可能要花掉数个工程师数周的时间,才得以提升系统性能。

华为 2012 实验室高级工程师 谢志鹏

即使是在实验室的调优达到了预期的效果,但是往往在业务运行真实环境里面,业务负载都是会动态变化,而工程师的调优工作,往往都只能应对静态负载场景,对于动态负载场景束手无策。

当前系统调优的两大痛点是:

如何使操作系统感知上层业务

如何降低人工调优成本

基于 openEuler 的自调优系统 A-Tune,使用系统画像技术,能识别业务匹配最佳资源模型,实时响应业务特征变化。目前,系统画像技术有两个关键技术点。第一个是感知技术,怎么去构建系统画像?主要是通过分类、聚类相结合的方法,分别在 CPU、IO、网络、内存方面聚类然后通过一些具体的业务进行一些细化的分类,来达到精准识别业务的效果。

系统画像构建与感知技术

第二个关键技术点,基于机器学习算法的调优参数搜索技术对于机器学习里面的贝叶斯优化算法去做了一个调优参数的自动搜索技术,工程师只需要提供一组他认为对我们业务有性能影响的参数,以及参数范围,接下来,把这些参数和参数范围告诉我们的机器学习算法,并且给出评价指标。

iSulad 的分享与实践

第四位分享嘉宾是,华为 iSula 容器团队架构师蔡灏旻。根据 Sysdig《2019 年的容器使用报告》显示,在容器密度方面,与 2018 年相比,每台主机中的容器密度提高了 100%,从 15 个增加到了 30 个其中最大节点密度已经达到了 250 个。边缘节点资源敏感,留给容器基础建设的资源屈指可数,一个更轻量、更快速的容器引擎呼之欲出。

华为 iSula 容器团队架构师 蔡灏旻

iSula 为全量的容器软件栈,包括引擎、网络、存储、工具集与容器 OS;iSulad 作为其中轻量化的容器引擎,可以为多种场景提供最灵活、最稳定、最安全的底层支撑,目前已开源给大家使用。开源地址:

https://gitee.com/openeuler/iSulad

iSulad 具有轻、快、易、灵四个特点:

轻:iSulad 的第一个使用场景是在端侧设备上,在一个智能摄像头上使用容器来达到快速、简单切换算法应用部署的功能。

快:采用 C/C++ 语言实现,具备运行速度快、底噪低等特性,且 LXC 运行时优秀的并发设计也为 iSulad 并发性能提供了基石。

易:iSulad 为了使开发者迁移方便,正在筹备开发一系列迁移工具,帮助开发者将自己的应用平滑迁移到 iSulad 上来。

灵:针对不同的使用场景提供不同的模式供大家组合切换,开发者可以根据自己的使用需要灵活配置切换注重性能的 performance 模式和注重资源占用的 light 模式

iSulad 的架构

热烈的调优实践

最后的调优实践上机环节是最热烈的,开发者们果然拥有最忠实的技术信仰,每一位指导老师身旁都围绕着一群开发者,从系统配置、调优思路到性能优化、故障分析,每一位开发者都沉浸在浓厚的技术探讨氛围中,我们也采访了几位开发者。

浓厚的技术探讨氛围

Q1:请问您今天参加的实践组是?感觉本次沙龙技术实践怎么样?

A:参加了 iSula 镜像,整体的议程感觉都很好。实践环节很好可以让我们切身,马上感受到这个产品怎么样。前面是理论讲座,后面马上就能使用是看得见摸得着的,这个非常好。

Q2:以后希望能听到鲲鹏技术沙龙更多内容分享的是?

A:更多应用指导性更强的内容,因为会在工作中用到。比如鲲鹏可以联合研究系统级别的部门和研究大数据的部门,将大数据应用系统结合起来讲解,这样能会产生更好的效果。这样应用指导性也会更强。

热烈的编码实践环节

点个在看少个 bug