项目上需要分析用户态程序的性能,开发人员一般的方式是在程序内部实现打点函数,记录当程序运行到该点的时间戳,通过比较两点之间的时间间隔来估计两点之间的时间消耗。这样一方面增加了开发的工作量,另外这些打点也会给业务带来额外性能消耗,是否有另外的方式来解决该问题呢?
前段时间在研究ftrace,发现其还有个uprobe特性,故名思意就是用户态的探针工具,今天尝试了下uprobe的使用,小结如下:
1.编写小测试程序如下:
#include <stdlib.h>
#include <stdio.h>
int count = 0;
void do_sth()
{
printf("current count = %d\n", count);
count++;
}
int main(int argc, char* argv[])
{
while(1)
{
do_sth();
}
return 0;
}
2.运行测试程序并找到需要probe的函数符号偏移量
root@X200:/home/kernel_test# objdump -t loop_print | grep do_sth
000000000040052d g F .text 000000000000002c do_sth
root@X200:/