首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决perf中的“不计”?

如何解决perf中的“不计”?
EN

Stack Overflow用户
提问于 2016-05-15 17:12:32
回答 2查看 3.4K关注 0票数 4

perf -d ./sample.out输出为:

代码语言:javascript
复制
Performance counter stats for './sample.out':

          0.586266 task-clock (msec)         #    0.007 CPUs utilized          
                 2 context-switches          #    0.003 M/sec                  
                 1 cpu-migrations            #    0.002 M/sec                  
               116 page-faults               #    0.198 M/sec                  
          7,35,790 cycles                    #    1.255 GHz                     [81.06%]
     <not counted> stalled-cycles-frontend 
   <not supported> stalled-cycles-backend  
     <not counted> instructions            
     <not counted> branches                
     <not counted> branch-misses           
   <not supported> L1-dcache-loads:HG      
     <not counted> L1-dcache-load-misses:HG
     <not counted> LLC-loads:HG            
   <not supported> LLC-load-misses:HG      

       0.088013919 seconds time elapsed

我读过为什么会出现在。但我得到的甚至是基本的柜台,如指示,分支等。谁能建议如何使它工作?

有趣的是:

苏多珀夫睡眠3

给出输出:

代码语言:javascript
复制
Performance counter stats for 'sleep 3':

          0.598484 task-clock (msec)         #    0.000 CPUs utilized          
                 2 context-switches          #    0.003 M/sec                  
                 0 cpu-migrations            #    0.000 K/sec                  
               181 page-faults               #    0.302 M/sec                  
     <not counted> cycles                  
     <not counted> stalled-cycles-frontend 
   <not supported> stalled-cycles-backend  
     <not counted> instructions            
     <not counted> branches                
     <not counted> branch-misses

-C 1睡眠3

代码语言:javascript
复制
 Performance counter stats for 'CPU(s) 1':

       3002.640578 task-clock (msec)         #    1.001 CPUs utilized           [100.00%]
               425 context-switches          #    0.142 K/sec                   [100.00%]
                 9 cpu-migrations            #    0.003 K/sec                   [100.00%]
                 5 page-faults               #    0.002 K/sec                  
       7,82,97,019 cycles                    #    0.026 GHz                     [33.32%]
       9,38,21,585 stalled-cycles-frontend   #  119.83% frontend cycles idle    [33.32%]
   <not supported> stalled-cycles-backend  
       3,09,81,643 instructions              #    0.40  insns per cycle        
                                             #    3.03  stalled cycles per insn [33.32%]
         70,15,390 branches                  #    2.336 M/sec                   [33.32%]
          6,38,644 branch-misses             #    9.10% of all branches         [33.32%]

       3.001075650 seconds time elapsed

为什么这件意外的事起作用了?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-06-03 06:12:15

对于非常短的程序来说,perf stat -d的典型问题不是统计抽样,而是复用(方括号中的百分比表示[33%] --这个计数器只计算了运行时间的33% )。

您要求PMU同时监视过多的事件,perf无法同时映射真实硬件(PMU -CPU的性能监视单元)上所有所需的计数器。典型的PMU可能有4或7或8个独立计数器,但如果启用了一些SMT技术(例如,HT - HyperThreading),则可以将数字除以两个。

当您要求perf计数这么多计数器(您的perf输出中有6个受支持的HW事件)时,它会将它们分成更小的组。当perf_events有机会改变它们时,内核会在某些时候改变它们,例如在任务时钟滴答(~3ms)上。

您可以使用较小的事件集将您的运行分成几个--任何数量的SW事件和每次运行的2-4个HW事件:

代码语言:javascript
复制
perf stat -e task-clock,page-faults,cycles,stalled-cycles-frontend 
perf stat -e task-clock,page-faults,cycles,instructions            
perf stat -e task-clock,page-faults,branches,branch-misses           
perf stat -e task-clock,page-faults,L1-dcache-load-misses:HG,LLC-loads:HG       
票数 12
EN

Stack Overflow用户

发布于 2016-05-16 02:07:37

sudo perf stat -C 1 sleep 3描述在CPU 1上发生的所有事情,所有进程和内核代码。这就是为什么需要sudo。这也是为什么任务时钟是3002ms的原因。

perf stat sleep 3 (它不需要sudo)只配置sleep(1)进程本身。任务时钟测量它的CPU时间~0.6毫秒.

sleep本身几乎不做任何事情;大多数运行的指令都在动态链接器中。正如@osgx的答案所指出的,由于perf在您的计算机上没有足够的硬件计数器,所以它正在对它们进行多路复用。没有计数的计数器一定是在sleep睡觉时记录的,而不是在运行。

为了取得好的效果,把你的微基准放在一个循环中,运行至少100毫秒,最好是1秒,以获得良好的信噪比,这取决于你正在计算的计数器。

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

https://stackoverflow.com/questions/37241287

复制
相关文章

相似问题

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