perf:软件事件之间的奇怪关系

时间:2017-06-21 13:26:44

标签: linux perf

好的,所以这真让我烦恼。

我使用perf记录cpu-clock事件(软件事件):

$ > perf record -e cpu-clock srun -n 1 ./stream

...而且perf报告生成的表格是空的。

我使用perf来记录perf list中列出的所有可用软件事件:

$ > perf record -e alignment-faults,context-switches,cpu-clock,cpu-migrations,\
dummy,emulation-faults,major-faults,minor-faults,page-faults,task-clock\
srun -n 1 ./stream

......该表给出了可用样本列表:

0 alignment-faults                                   
125 context-switches                                                
255 cpu-clock                                                  
21 cpu-migrations                                                        
0 dummy                                                              
0 emulation-faults                                             
0 major-faults                                                      
128 minor-faults                 
132 page-faults                                                           
254 task-clock 

我可以看看在cpu-clock中收集的样本,它给了我信息。为什么?!如果我只测量cpu-clock,为什么它不起作用?为什么四个活动中没有收集样本?

这是这个问题的后续行动: error: perf.data file has no samples

1 个答案:

答案 0 :(得分:0)

可能srun不能直接使用fork启动目标进程。它可以使用一些varian ot远程shell,如ssh或daemon来启动进程。

perf record(没有-a选项)将仅跟踪直接分叉的子进程,而不是由sshd或其他守护进程启动(分叉)的进程。如果srun可以使用perf record ... srun命令并且使用perf stat命令,它将永远不会对远程机器进行概要分析(这是为了分析srun应用程序及其所有内容)。

首先尝试 srun -n 1 perf stat ./stream srun -n 1 /usr/bin/perf stat ./stream 获取总(原始)性能计数器,并将perf作为srun参数;这是使用远程shell或守护进程的工具的正确用法(可能具有perf的完整路径):

perf stat

srun -n 1 perf record -e cpu-clock ./stream srun -n 1 /usr/bin/perf record -e cpu-clock ./stream 将打印目标任务的运行时间。然后选择一些具有高原始计数器的事件(性能记录通常将采样率调整到几kHz左右,因此如果有足够的原始事件计数,将生成数千个样本):

{{1}}