perf 有一個功能就是按一定頻率采集某一個程序的調用棧,然後對調用棧進行統計分析。如果某一個代碼路徑在采集結果中出現的越平凡,說明程序消耗在這個代碼路徑上的時間也就越多。這樣我們就能很快找到程序調用最頻繁的代碼路徑。
perf record -F 99 -p $(pidof test1) -g -- sleep 300這個命令是采集test1程序相關的調用棧,采樣頻率為99Hz,-g表示將調用棧打印出來,-- sleep 30表示采樣時間是300秒
perf report -g --stdio這個命令是查看采用的結果
為了了解這個工具有什麼樣的作用,我特意寫了一個程序來進行分析。
#includeint functiona(void){ int c = 0; int count = 0; for(c = 1; c < 20000; c++) { count++; } return;}int functionb(void){ int c = 0; int count = 0; for(c = 1; c < 40000; c++) { count++; } return;}int main(int argc, char * argv[]){ for(;;) { functiona(); printf("call function a\n"); functionb(); printf("call function b\n"); } return;}
通過編譯命令gcc -g -o test1 test1.c