首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分程序的perf统计

部分程序的perf统计
EN

Stack Overflow用户
提问于 2014-10-08 22:40:57
回答 2查看 2.9K关注 0票数 7

perf可以只为程序执行的一部分收集硬件计数器统计数据吗?如果是这样的话,是怎么做的?

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

以前的一些问题已经得到了有关的答案,但仍然存在一些缺点:

  • 使用探针我得到了同样的错误,我使用的是一个稍微更新的内核(3.13)。这些修补程序是否可以在新版本中使用?
  • 打开我想保持在命令行中定义事件的灵活性。我还查看了perf 本身的代码,但是它似乎没有通过调用perf_event_open来设置。
EN

回答 2

Stack Overflow用户

发布于 2018-08-04 21:11:54

生成子进程以运行perf。

perf stat附加到父级。

在需要时从父进程终止子进程。

代码语言:javascript
复制
#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);
     }
}
票数 6
EN

Stack Overflow用户

发布于 2018-08-07 03:26:21

您可以使用libpfcjevents,它们都是与Linux兼容的库,允许在用户程序的任意点通过rdpmc编程和读取性能计数器。

这对在命令行中指定事件的请求没有直接帮助,但是您可以根据ocperf.py代码或libpfm4一起备份一些内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26267588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档