系统性能分析方法
今年是农历二零二五最后一天工作日,可以静下心来写点东西。
最近半个月在查一些业务性能问题,从X86架构迁移到ARM架构,想借这个具体问题总结一下系统性能分析方法。
从最近一段时间的工作来看,主要有几个重点方面:
-
首先检查环境配置是否一致,而配置又包含硬件和软件。
- 当业务可用的硬件不一致时,可被调度的资源就会有偏差。举个例子,当一台服务器的核存比不一致时,尽管你的软件配置是一致的,在分布式计算引擎中,但是调度的Excutor数量会不一样。常见的服务器硬件一般包括CPU、内存、磁盘、网卡等。可以一一做检查。
- 当我们提到软件配置,一般我们业务软件基本是一致的,包括软件版本、业务参数等等。需要注意的是,系统软件也很重要。例如Linux内核,它一般控制着硬件配置的参数,例如操作系统默认内存页的大小,主频是否可以超,超到多少等等。
- 除了上面两条,NUMA配置我觉的需要单列一下,目前很多服务器都是高密机型,NUMA作为CPU硬件到软件一种映射,在计算场景也很重要。同时一些厂商在跨片访存的性能做的不是很好,Remote Memory Access和Local Memory Access 延迟差距很大,调度系统的绑核策略也值得关注。
-
当所有的软硬件环境基本一致时,如何提取关键性能信息也很重要。
- 首先是硬件监控,我们看监控的目的是观察业务资源使用情况如何,是否某些资源成为了瓶颈。主要是看一下是否有异常点,比如CPU利用率如何,观察cpu.sys是不是很高,如果cpu.sys高,大多往内核方向去看。除了CPU之外,也看看内存、磁盘、网络的使用情况,是不是被打满了。
- 其次是业务现场的性能分析。CPU火焰图其实是一个很好的手段,它可以直观的抓取到业务正在执行的逻辑是什么。同时微架构的Topdown分析也很重要。TMA是英特尔先提出的一个方法论,聚合了一些PMU事件,最后得出一些结论。目前ARM架构也有类似工具的支持。
-
当信息采集完成后,最重要的其实是抽取关键逻辑,复现问题场景。
-
当我们用火焰图抓取到业务逻辑时,我们其实就有了一个很好的逻辑抽取的范例。这次问题排查的关键进展也是在这里。一开始我就跟合作团队提出来复现的需求,但是他们没有立即去做这件事。后来我根据火焰图搞了一个简单的测试代码,基本确认了一个比较大性能差距点。
-
抽取逻辑当然比较困难,想一比一复现是有些苛求的,但是我们最好要抓住重点。
-
当我们有了一个可以复现小案例时,后续的工作也会比较容易开展了,今天就先到这里吧。