Optimyze 的联合创始人在演讲开始时指出,随着摩尔定律的终结、从本地软件向 SaaS 的转变以及计量云计算的广泛采用,效率现在对企业至关重要,并直接影响利润率。
在讨论安全和性能工程有多少共同点时,Dullien 分享了他多年来在不同角色和项目中遇到的一些性能挑战。首先,开发人员不应忘记他们使用的软件通常不是为今天运行的硬件设计的:
以 Java 为例,Dullien 指出了一些挑战:
例如,遍历堆上的大型链接图结构(垃圾收集)或假设取消引用指针不会带来显着的性能损失,这在 1991 年是完全正确的假设,但在今天是完全错误的,您最终会以许多令人惊讶的方式付出代价。
根据 Dullien 的说法,所有 CPU 周期的 10-20% 花在垃圾收集上是很常见的,许多 Java 开发人员成为调整 GC 的专家,而高性能 Java 开发人员则完全避免分配。
比较旋转磁盘和 NVMe SSD,Dullien 强调了应用程序和数据库中的早期设计选择如何影响当今的性能:
数量惊人的存储系统具有固定大小的线程池、mmap 支持的存储并依赖于大型读头,如果您在旋转磁盘上,这些选择是有意义的(...)现代 SSD 是性能野兽,您需要仔细考虑喂养他们的最佳方式。
例如,由于单个线程只能产生 3000 IOPS,要使 170k IOPS 驱动器饱和,应用程序需要 56 个线程不断地遇到页面错误。因此,对于阻塞 I/O,线程池往往太小。云服务提供了不同的挑战:
云附加存储是一个完全不同的野兽,很少有 DBMS 优化为在“高延迟、近乎无限的并发”范例中运行。
Dullien 警告说,许多应用程序中包含的有限数量的公共库(分配器、垃圾收集器、压缩器、FFMpeg 等)的影响在全球范围内消耗了最多的 CPU:在几乎每个大型组织中,一个 CPU 成本公共库的成本将超过最重量级应用程序的成本。组织结构图也很重要,垂直组织可以更好地识别和修复库,在任何地方都可以从级联中获益。
Dullien 对基准测试采取了行动,并警告统计噩梦:
测量值的高差异意味着更难判断你的改变是否改善了事情,但人们对差异的恐惧还不够。
云实例上嘈杂的邻居、不可靠的多次运行以及与生产部署不匹配的基准测试是影响基准测试的其他常见问题。
Dullien 在开发、业务、数学和硬件领域提供了不同的建议,其中一些要点给从事性能工作的从业者:
知道你的餐巾纸数学,接受工具是新生的和脱节的,始终衡量,肇事者往往不是通常的嫌疑人,有很多唾手可得的果实,不要把轻松的胜利留在桌面上。Dullien 的演讲以对现有工具的不足以及可以和应该改进的地方的一些想法作为结束,重点关注二氧化碳减排、成本核算、延迟分析和集群方式的“真正因果”分析。