为什么需要性能调优?
你有没有在手机、PC上玩网游、看高清视频的时候,抱怨过“太慢了”、“好卡”?
大多数人会把这些影响体验的问题归结到“网速太慢”上,除此之外还有个更重要的根因,就是系统性能瓶颈问题所致,倘若你换一台配置更高、内存更大、性能更好的设备玩游戏,上述问题马上就能迎刃而解。
同样的问题也存在于服务器上,作为千行百业的数字化基础设施,服务器承载了大量复杂的行业应用,支撑着数字社会的高效运转。因此,服务器要面临的各种瓶颈挑战更多也更大。普通用户可以通过更换手机这种简单粗暴的方式来提升游戏体验,对于服务器这种昂贵的设备来说显然不合适。
事实上即使更换了更好的设备,依然可能再次出现性能瓶颈,这是因为系统性能往往是多方面的,包括服务器硬件(如CPU/RAM)、应用软件(Web服务器、数据库等)、应用程序、操作系统、网络设备等众多配置和指标的合集,某一个指标出现问题,都可能导致系统运行缓慢。这时候,我们更需要的其实是“系统性能调优”。
什么是系统性能调优呢?
简单的说就是综合、全面的了解系统硬件、操作系统和应用软件的相关信息,分析其配置和运行情况,调节各模块之间的系统资源占用关系,实现整个系统的性能最大化,从而不断的满足业务需求。
性能分析是一项复杂的系统化的工作,业界有非常多的性能分析小工具,专业分析系统各模块的性能,然而众多工具的使用不仅带来大量的学习成本、分析效率低下,更重要的是数据不能互通,无法全局分析,并且需要依靠非常娴熟的经验才能针对各模块的问题进行调优。开发者亟需更加全面、专业、智能化的系统调优工具。
DevKit系统性能分析工具是什么?
DevKit性能分析工具正是为了满足上述需求而设计,DevKit性能分析工具是一个工具集,包含:系统性能分析工具、JAVA性能分析工具、系统诊断工具,本文将重点介绍系统性能分析工具。
系统性能分析工具主要针对服务器系统(包括:硬件、OS、应用软件等)进行性能分析,能收集服务器硬件、操作系统、进程/线程、函数等各层次的性能数据,分析得出系统性能指标,定位到系统瓶颈点及热点函数,给出优化建议,辅助用户快速定位和处理软件性能问题。相对业界性能分析工具,该工具主要增强实现如下能力:
· 提供软硬件结合分析能力,采集和分析硬件性能指标,以及硬件性能在软件层的表现,让用户更加全面的了解整个系统的运行状况。
· 系统化的分析建立各层指标之间的关联关系、并以用户视角呈现这些指标和关系,方便用户更易于发现问题。
· 结合华为在鲲鹏处理器上的性能优化经验,给出优化思路和建议,帮忙用户快速定位和修复问题。
DevKit系统性能分析工具有哪些功能?
系统性能分析工具提供3大模块/9大主要功能:
Figure 1 功能全景图
· 通用分析:采集和分析整个系统的软硬件配置信息、识别性能瓶颈,针对异常指标项提供优化建议(包含全景、进程/线程和热点函数分析);
· 系统部件分析:针对系统主要部件(如:处理器、内存、存储等)暴露的硬件指标,结合系统软件运行指标,分析各部件的性能瓶颈(包含微架构、访存和I/O分析);
· 专项分析:针对特定性能问题进行专题分析(包含资源调度、锁与等待和HPC分析)。
其中全景分析、热点函数分析、资源调度分析是开发者最常使用的分析场景,本文将对这些功能做详细介绍。
全景分析——全面掌握系统配置和整体性能
通过采集系统软硬件配置信息,以及系统的CPU、内存、存储IO、网络IO等资源的运行情况,获得对应的使用率、饱和度、错误次数等指标,以此识别系统性能瓶颈。针对部分系统指标项,将根据当前已有的基准值和优化经验提供优化建议。
Figure 2 系统硬件拓扑图及其配置
支持展示服务器系统及其各个子系统的拓扑结构及其配置。方便用户快速了解系统配置,及是否存在配置不合理的点,例如:内存条配置位置不合理。
Figure 3 系统性能指标
基于USE性能分析方法,针对系统CPU、内存、磁盘IO、网络IO等资源的运行情况,获得它们的使用率、饱和度、错误等指标,以此识别系统瓶颈。
综合分析系统性能和系统配置情况,给出检测到的性能瓶颈点,并给出优化建议和修改方法。
Figure 4 解决方案场景软硬件配置及其优化建议
针对大数据、数据库、分布式存储场景的硬件配置、系统配置和组件配置进行检查并显示不是最优的配置项,同时分析给出典型硬件配置及软件版本信息。
热点函数分析——直接定位到C/C++程序代码瓶颈点
支持分析C/C++程序代码识别性能瓶颈,给出对应的热点函数以及源码和汇编指令的信息。通过冷/热火焰图展示函数的调用关系,发现优化路径。
Figure 5 热点函数/模块及其优化建议
分析给出系统和应用的Top热点函数和热点模块,并给出优化建议,其中针对华为优化或实现的基础库、数据库等会给出详细的优化说明和下载链接。
Figure 6 热点指令及其源码
针对热点函数可以关联到它的汇编指令和源码,并且明确标识出热点指令或热点代码块,用户可以直接针对优化。
Figure 7热点函数及其调用栈
资源调度分析——跟踪CPU核和进程状态切换情况
基于CPU调度事件分析系统资源调度情况,包括:CPU核在各个时间点的运行状态、进程/线程在各个时间点的运行状态、进程/线程状态切换情况等,用户根据这些信息可以分析进程/线程是否存在大量的系统调用、不合理的锁或同步等,以此找到优化点。
Figure 8 进程/线程切换信息
分析进程/线程调度信息,识别线程是否频繁上下文切换、CPU是否能及时调度等性能问题。分析进程/线程在NUMA节点的切换情况,对于频繁切换,给出绑核优化建议。
Figure 9 CPU核运行状态
分析CPU核在各个时间点的运行状态,如:idle、running等。如果是running状态,能关联在CPU核上运行的进程/线程信息。支持高亮显示某个线程在各个CPU核上的运行情况。
Figure 10 进程/线程运行状态
分析进程/线程在各个时间点的运行状态,如:wait_blocked、wait_for_cpu和running,能方便识别频繁上下文切换的线程。
DevKit性能分析工具还有哪些能力?
鲲鹏开发套件DevKit是面向开发者研发全作业流程的一站式开发套件,从2019年推出至今,提供了覆盖代码开发、迁移、编译、测试、调优、诊断等研发全作业流程的工具集,助力开发者极简开发。
其中DevKit性能分析工具支持鲲鹏平台上的系统性能分析、Java性能分析和系统诊断提供系统全景及常见应用场景下的性能采集和分析功能,并基于调优专家系统给出优化建议。同时提供调优助手,指导用户快速调优系统性能。
本文所介绍的系统性能分析仅是DevKit性能分析工具的主要能力之一,为了便于广大开发者们更加真实的体验、使用上述功能,DevKit还提供远程实验室,一站式预装DevKit开发环境,申请即可免费试用。
此外,想要了解更多关于DevKit的强大的功能,欢迎各位开发者访问鲲鹏社区DevKit专区。