部分程序的性能统计
- 2024-11-04 08:42:00
- admin 原创
- 62
问题描述:
是否可以使用 perf 来收集程序执行过程中部分时间的硬件计数器统计信息?如果可以,如何收集?
likwid 提供了能够定义命名区域的功能,但如果在仅安装了 perf 的系统上就可以实现此功能,那就太好了。
之前的一些问题已经返回了相关答案,但仍然存在一些不足:
使用探测时,我得到了同样的错误,并且我使用的是稍新的内核(3.13)。这些修复在较新版本中可用吗?
使用 perf_event_open,我希望保持灵活性,以便在命令行上定义事件。我还查看了 perf stat本身的代码,但似乎它没有通过调用 perf_event_open 进行设置。
解决方案 1:
生成一个子进程来运行 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);
}
}
解决方案 2:
您可以使用libpfc或jevents,它们都是与 Linux 兼容的库,允许rdpmc
在用户空间程序中的任意点进行编程和读取性能计数器。
这不会直接帮助您在命令行上指定事件的请求,但您可以基于 ocperf.py 代码或 libpfm4 来支持某些操作。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD