主要观点:为查看微小变化对性能的影响,常需基准测试 web 服务,需控制硬件和系统的动态因素以减少测量差异,追求基准测试的可重复性(精度重于准确性),并介绍了多种减少基准测试噪声的方法。
关键信息:
- 现代硬件和系统复杂动态,相同基准测试两次结果未必相同,有多种影响因素如 SMT、时钟频率提升、热节流、调度噪声等。
- 基准测试需可重复,精度比准确性更重要,如预期性能提升 1%,则不能使用方差为±5%的基准测试。
- 可通过禁用 SMT、动态时钟提升、选择更好的缩放调节器、去除调度噪声、禁用 ASLR 等方法减少基准测试噪声。
- 运行基准测试前应热身(运行但不测量以预热缓存),运行后应冷却(让处理器温度达到合理值),且应保持笔记本电脑插电以避免性能节流。
- 仅通过上述方法难以可靠地得出性能的微小变化,还需对代码和硬件有“机械共鸣”。
重要细节: - SMT 可让一个核心呈现为多个硬件执行上下文,在特定情况下有增益但会引入大量基准测试方差,可通过命令禁用。
- 动态时钟提升受多种因素影响,可通过设置标称频率模拟限制时钟,或设置 AMD pstate 驱动程序来控制。
- 性能调节器有多种,笔记本电脑基准测试时宜使用性能调节器。
- 可通过
taskset或[cset]固定进程到单个 CPU 以避免调度噪声。 - ASLR 可随机化地址空间,增加结果的变异性,可通过命令禁用。
- 对一个简单的 Python web 服务进行基准测试,可将噪声降低 6 倍。
参考资料:LLVM 基准测试技巧、同时多线程、Linux 上的 CPU 性能缩放、内核地址空间布局随机化、机械共鸣。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。