首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统调用硬件性能计数器

系统调用硬件性能计数器
EN

Stack Overflow用户
提问于 2015-01-26 11:11:20
回答 1查看 541关注 0票数 1

我正在处理一个项目,我希望在执行文件之前和之后获得系统调用(例如: read())的性能计数器(缓存、TLB等)值。

我试着在Ubuntu上使用perf来做这件事,但是没有得到任何结果。有没有办法用perf或者其他工具来做呢?

谢谢你的帮助。

代码语言:javascript
复制
3.329057 task-clock (msec)         #    0.714 CPUs utilized          
16 context-switches                #    0.005 M/sec                  
0 cpu-migrations                   #    0.000 K/sec                  
257 page-faults                    #    0.077 M/sec                  
1,983,212 cycles                   #    0.596 GHz                    
1,352,902 stalled-cycles-frontend  #   68.22% frontend cycles idle   
1,080,180 stalled-cycles-backend   #   54.47% backend  cycles idle   
1,336,919 instructions             #    0.67  insns per cycle        
                                   #    1.01  stalled cycles per insn
       267,730 branches            #   80.422 M/sec                  
       <not counted> branch-misses           

   0.004663489 seconds time elapsed
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-05 06:53:19

在计数模式下,有用于perf_event_open的小包装器库perf_event_open,就像perf stat使用的那样(您引用了它的输出)。

您可以设置hw事件计数(在启用内核计数时-在easyperf中使用PERFMON_EVENTSEL_OS标志),然后在包装器中读取计数器perf_read_all的当前值,然后运行您想要配置的函数(syscall),然后读取新的计数器值。新旧值的区别在于对目标函数成本的估计。检查这个测试,目标函数是foo

https://github.com/castl/easyperf/blob/master/test.c

您不能测量太小的调用,因为从perf_event_open读取hw计数器是通过几个read系统完成的。因此,执行几个类似的syscalls (循环为100或1000),或者执行做更多工作的syscalls,或者尝试测量读取的开销以获得hw计数器(度量空'foo‘函数以获得开销;然后度量目标短函数,然后比较差异)。

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

https://stackoverflow.com/questions/28149000

复制
相关文章

相似问题

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