gpt4 book ai didi

linux - 部分程序的性能统计

转载 作者:IT王子 更新时间:2023-10-29 00:34:34 27 4
gpt4 key购买 nike

是否可以使用 perf 仅收集程序执行的一部分的硬件计数器统计信息?如果是,怎么办?

likwid 提供了能够定义命名区域的功能,但如果这在只安装了 perf 的系统上是可能的,那就太好了。

之前的一些问题已经返回了相关的答案,但是还存在一些不足:

  • Using probe我遇到了同样的错误,我使用的是稍新的内核 (3.13)。这些修复程序是否在较新版本中可用?
  • Using perf_event_open我想保持在命令行上定义事件的灵 active 。我还查看了 perf stat itself 的代码, 但它似乎没有通过调用 perf_event_open 来设置。

最佳答案

产生一个子进程来运行 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);
}
}

关于linux - 部分程序的性能统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26267588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com