第二章 性能瓶颈的分析与定位(2) 检测式剖析器

5个月前 (12-07) 0 点赞 0 收藏 0 评论 9 已阅读

检测式剖析器(Instrumenting profilers)

       代码检测工具就是在现存的代码中加入额外的代码用于测量性能和输出性能数据。这可以通过某些工具自动完成,也可通过手写些printf语句完成。有些年头的prof和gprof等GUN剖析器通常需要程序员指定一个特殊的编译选项(-p或-pg),GUN编译器会在每个函数中加入必要的代码。举个更现代的例子,商用的rational quantify工具使用对象代码插入技术(object-code insertion),以动态插入测试代码的方式,让可执行程序被测试。在另一方面,RAD游戏工具的telemetry模块提供了可以手动插入到代码中的检测函数,而Intel的VTune则在它的检测和跟踪技术(instrumentation and tracing technology, ITT) API库中提供了这类函数。

       基于上述原理,这类技术也被称为侵入式检测技术,因为他们改变了我们原本要测量的代码(对于那些技术极客,是否还记得海森伯测不准原理?)。因此,这类方法的优点是可以获取高精度的测试结果数据,缺点是改变了程序的运行时行为(也即是,损失了运行时的精度)。

        一种更简单但更费时的代码检测技术即手动插入测量和输出代码也有用武之地,也有其存在的必要:

        1. 剖析构建(Profile build): 除通常的release和debug构建配置外,可以增加一种新的构建配置,在这种配置下,剖析代码将被使能,适用于调查程序性能问题或者检查应用程序性能的场景。例如,在Telemetry的案例中,可以设置#define NTELEMETRY 1,并重新编译,即能移除测试代码。

        2. 可定制的可视化呈现(Custom visualizations): 手动测量的另外一个好处是可以按需要进行格式化输出,使之可以兼容我们偏好的可视化工具。例如,Intel的ITT API函数可以根据环境变量输出好几种可视化输出格式。在本章的稍后部分,我们将看到这种方法的几个实例。


第二章 性能瓶颈的分析与定位(2) 检测式剖析器

本文收录在
0评论

登录

忘记密码 ?

切换登录

注册