perf
简介
基于采样的性能剖析工具
通过栈采样对程序进行性能剖析,生成火焰图。
剖析结果将显示协程的Running及Pending时间,同时对编译/加载时间进行估计
缺陷:采样依赖gs提供的调用栈信息获取函数过于复杂,容易导致采样超时。
组件接口
perf.gs
| 函数原型 | 函数作用 |
|---|---|
| bool start(int freq = 1000, array co_names = nil) | 开始性能剖析 |
| bool stop() | 结束性能剖析,调用该函数的协程将等待后台采样协程结束 |
| bool dump_flame(string filename, float proportion_threshold = 0.001) | 将统计信息输出成火焰图,只在成功执行start和stop后有效 |
样例
import pkg.perf;
int fib(int n) {
return n <= 1 ? 1 : fib(n - 1) + fib(n - 2);
}
void main() {
printf("fib: %d\n", fib(32));
array arr = [];
for (int i = 0; i < 100000000; ++i) {
arr.push_back(i);
}
arr.find(9876);
}
// 开始剖析
perf.start(1000);
// 希望进行剖析的程序段
main();
// 结束剖析
perf.stop();
// 输出剖析结果
perf.dump_flame("/flame.html");