[英]perf stat for part of program
是否可以通过perf收集硬件计数器统计信息,仅用于程序执行的一部分? 如果是这样,怎么样?
likwid提供了能够定义命名区域的功能,但如果只在安装了perf的系统上实现这一点,那将会很棒。
以前的一些问题已经返回相关答案,但仍有一些缺点:
生成子进程以运行perf stat。
将perf stat
附加到父级。
在需要时从父级杀死子进程。
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
int main()
{
int pid= getpid();
int cpid = fork();
if( cpid == 0)
{
// child process . Run your perf stat
char buf[50];
sprintf(buf, "perf stat -p %d > stat.log 2>&1",pid);
execl("/bin/sh", "sh", "-c", buf, NULL);
}
else
{
// set the child the leader of its process group
setpgid(cpid, 0);
//////////////////////////////////////////////
// part of program you wanted to perf stat
sleep(3);
////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// stop perf stat by killing child process and all its descendants(sh, perf stat etc )
kill(-cpid, SIGINT);
////////////////////////////////////////////////////////////////////
// rest of the program
sleep(2);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.