虽然我可以直观地得到大部分结果,但我很难完全理解perfreport命令的输出,尤其是关于调用图的内容,所以我写了一个愚蠢的测试来一次性解决我的这个问题。愚蠢的测试我编译了以下内容:gcc-Wall-pedantic-lmperf-test.c-operf-test没有积极的优化来避免内联等。#include#defineN10000000UL#defineUSELESSNESS(n)\do{\unsignedlongi;\doublex=42;\for(i=0;i扁平化分析perfrecord./perf-testperfreport有了这些我得到:94,44%perf-testli
如何在perfreport输出中按self列排序?$perf--versionperfversion4.0.8-300.fc22.x86_64$uname-aLinuxmarko-desktop4.0.8-300.fc22.x86_64#1SMPFriJul1021:04:56UTC2015x86_64x86_64x86_64GNU/Linux数据调用$perfrecord-g-p$(pidofnode) 最佳答案 默认情况下,perf接收创建“childrenoverheadview”的--children参数。因此,您可以通过简
如何在perfreport输出中按self列排序?$perf--versionperfversion4.0.8-300.fc22.x86_64$uname-aLinuxmarko-desktop4.0.8-300.fc22.x86_64#1SMPFriJul1021:04:56UTC2015x86_64x86_64x86_64GNU/Linux数据调用$perfrecord-g-p$(pidofnode) 最佳答案 默认情况下,perf接收创建“childrenoverheadview”的--children参数。因此,您可以通过简
使用perfreport时,我没有看到程序的任何符号,而是得到如下输出:$perfrecord/path/to/racketints.rkt10000$perfreport--stdio#OverheadCommandSharedObjectSymbol#.......................................#70.06%ints.rkt[unknown][.]0x5f99b826.28%ints.rkt[kernel.kallsyms][k]0xffffffff8103d0ca3.66%ints.rktperf-32046.map[.]0x7f1d9be466
使用perfreport时,我没有看到程序的任何符号,而是得到如下输出:$perfrecord/path/to/racketints.rkt10000$perfreport--stdio#OverheadCommandSharedObjectSymbol#.......................................#70.06%ints.rkt[unknown][.]0x5f99b826.28%ints.rkt[kernel.kallsyms][k]0xffffffff8103d0ca3.66%ints.rktperf-32046.map[.]0x7f1d9be466
我正在以下列方式运行“perf”:perfrecord-a--call-graph-psome_pidperfreport--call-graph--stdio然后,我看到了这个:1.60%my_binarymy_binary[.]my_func|---my_func||--71.10%--(nil)|(nil)|--28.90%--0x17f310000000a我看不到哪些函数调用了my_func()。我看到的是“nil”和“0x17f310000000a”。难道我做错了什么?这可能不是调试信息问题,因为某些符号显示而其他符号未显示。更多信息:我正在运行CentOS6.2(内核2.6
我正在以下列方式运行“perf”:perfrecord-a--call-graph-psome_pidperfreport--call-graph--stdio然后,我看到了这个:1.60%my_binarymy_binary[.]my_func|---my_func||--71.10%--(nil)|(nil)|--28.90%--0x17f310000000a我看不到哪些函数调用了my_func()。我看到的是“nil”和“0x17f310000000a”。难道我做错了什么?这可能不是调试信息问题,因为某些符号显示而其他符号未显示。更多信息:我正在运行CentOS6.2(内核2.6
运行perfstatls显示:Performancecounterstatsfor'ls':1.388670task-clock#0.067CPUsutilized2context-switches#0.001M/sec0cpu-migrations#0.000K/sec266page-faults#0.192M/sec3515391cycles#2.531GHz2096636stalled-cycles-frontend#59.64%frontendcyclesidlestalled-cycles-backend2927468instructions#0.83insnspercycl
运行perfstatls显示:Performancecounterstatsfor'ls':1.388670task-clock#0.067CPUsutilized2context-switches#0.001M/sec0cpu-migrations#0.000K/sec266page-faults#0.192M/sec3515391cycles#2.531GHz2096636stalled-cycles-frontend#59.64%frontendcyclesidlestalled-cycles-backend2927468instructions#0.83insnspercycl
我试图弄清楚为什么修改后的C程序比未修改的对应部分运行得更快(我添加了很少的代码行来执行一些额外的工作)。在这种情况下,我怀疑“缓存效果”是主要的解释(指令缓存)。因此,我找到了perf(https://perf.wiki.kernel.org/index.php/Main_Page)分析工具,但不幸的是,我无法理解其关于缓存未命中的输出的含义。提供了几个关于缓存的事件:cache-references[Hardwareevent]cache-misses[Hardwareevent]L1-dcache-loads[Hardwarecacheevent]L1-dcache-load-m