跳到主要内容

perf

简介

基于采样的性能剖析工具

通过栈采样对程序进行性能剖析,生成火焰图

剖析结果将显示协程的Running及Pending时间,同时对编译/加载时间进行估计

Tcompilation=(Tload_staticTcreate)+Tcompile_programT_{compilation}=\sum{(T_{load\_static}-T_{create})}+\sum{T_{compile\_program}}

缺陷:采样依赖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");