Thomas Dullien在QCon London分享大规模计算系统性能分析的经验
Elastic的杰出软件工程师Thomas Dullien在QCon London会议上分享了他在分析大规模计算系统性能时的一些经验教训。
背景与挑战
Dullien指出,随着摩尔定律的失效、从本地软件向SaaS的转变以及计量云计算的广泛应用,效率已成为企业成功的关键因素,并直接影响利润率。他还强调了安全性和性能工程之间的相似性,并分享了他多年来在不同角色和项目中遇到的性能挑战。
软件设计与硬件的不匹配
Dullien强调,开发者不应忽视他们使用的软件通常并不是为当前运行的硬件设计的。他以Java为例,指出在1991年正确的假设(如遍历大型链表结构或解引用指针不会带来显著的性能开销)在今天已经完全不适用,开发者可能会因此付出意想不到的代价。例如,通常有10-20%的CPU周期被用于垃圾回收,许多Java开发者成为调优垃圾回收的专家,而高性能Java开发者则完全避免内存分配。
存储系统的设计选择
Dullien比较了旋转磁盘和NVMe SSD,并指出早期应用程序和数据库的设计选择如何影响今天的性能。例如,许多存储系统采用固定大小的线程池、mmap支持的存储和大读取头,这些选择在旋转磁盘上是有意义的,但在现代SSD上则需要重新考虑。为了充分利用高性能SSD,应用程序需要更多的线程来发起I/O操作。云存储则带来了不同的挑战,很少有数据库管理系统(DBMS)针对“高延迟、近乎无限并发”的云环境进行优化。
常见库的CPU消耗
Dullien警告说,许多应用程序中常见的库(如内存分配器、垃圾回收器、压缩库、FFMpeg等)在全球范围内消耗了大量的CPU资源。在几乎所有大型组织中,这些库的CPU成本甚至可能超过最重量级应用的成本。他还提到,垂直组织结构在识别和修复库问题方面表现更好,从而带来级联的收益。
基准测试的挑战
Dullien强调了基准测试中的统计问题,指出高方差使得难以确定改进是否有效。他还提到了云实例上的“嘈杂邻居”问题、不可靠的多次运行以及基准测试与生产环境不匹配等常见问题。
开发者的建议
Dullien为性能优化工作提供了以下建议:
- 了解基本的计算:掌握简单的估算方法。
- 接受工具的不成熟:工具通常处于初级阶段且不连贯。
- 始终进行测量:问题的根源往往不是通常的怀疑对象。
- 抓住低垂的果实:不要错过容易实现的优化。
结论与未来展望
Dullien在演讲结束时讨论了现有工具的不足之处,并提出了改进方向,包括减少碳排放、成本核算、延迟分析以及集群级别的“真正因果”性能分析。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。