首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么perf报告缓存未命中?

为什么perf报告缓存未命中?
EN

Stack Overflow用户
提问于 2013-02-04 00:12:05
回答 3查看 31.5K关注 0票数 38

根据perf tutorials的说法,perf stat应该使用硬件计数器报告缓存未命中。但是,在我的系统(最新的Arch Linux)上,它不:

代码语言:javascript
复制
[joel@panda goog]$ perf stat ./hash

 Performance counter stats for './hash':

    869.447863 task-clock                #    0.997 CPUs utilized          
            92 context-switches          #    0.106 K/sec                  
             4 cpu-migrations            #    0.005 K/sec                  
         1,041 page-faults               #    0.001 M/sec                  
 2,628,646,296 cycles                    #    3.023 GHz                    
   819,269,992 stalled-cycles-frontend   #   31.17% frontend cycles idle   
   132,355,435 stalled-cycles-backend    #    5.04% backend  cycles idle   
 4,515,152,198 instructions              #    1.72  insns per cycle        
                                         #    0.18  stalled cycles per insn
 1,060,739,808 branches                  # 1220.015 M/sec                  
     2,653,157 branch-misses             #    0.25% of all branches        

   0.871766141 seconds time elapsed

我遗漏了什么?我已经搜索了手册页和网页,但没有找到任何明显的东西。

编辑:我的中央处理器是英特尔i5 2300K,如果这很重要的话。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-04 01:07:04

在我的系统上,通过显式地请求这些事件,我能够让perf stat报告缓存引用和未命中的事件,如下所示

代码语言:javascript
复制
perf stat -B -e cache-references,cache-misses,cycles,instructions,branches,faults,migrations sleep 5
Performance counter stats for 'sleep 5':

         10573 cache-references                                            
          1949 cache-misses              #   18.434 % of all cache refs    
       1077328 cycles                    #    0.000 GHz                    
        715248 instructions              #    0.66  insns per cycle        
        151188 branches                                                    
           154 faults                                                      
             0 migrations                                                  

   5.002776842 seconds time elapsed

默认事件集不包括缓存事件,与您的结果匹配,我不知道原因

代码语言:javascript
复制
perf stat -B sleep 5

Performance counter stats for 'sleep 5':

      0.344308 task-clock                #    0.000 CPUs utilized          
             1 context-switches          #    0.003 M/sec                  
             0 CPU-migrations            #    0.000 M/sec                  
           154 page-faults               #    0.447 M/sec                  
        977183 cycles                    #    2.838 GHz                    
        586878 stalled-cycles-frontend   #   60.06% frontend cycles idle   
        430497 stalled-cycles-backend    #   44.05% backend  cycles idle   
        720815 instructions              #    0.74  insns per cycle        
                                         #    0.81  stalled cycles per insn
        152217 branches                  #  442.095 M/sec                  
          7646 branch-misses             #    5.02% of all branches        

   5.002763199 seconds time elapsed
票数 54
EN

Stack Overflow用户

发布于 2015-11-30 20:10:27

the latest source code中,默认事件不再包含cache-missescache-references

代码语言:javascript
复制
struct perf_event_attr default_attrs[] = {

  { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_TASK_CLOCK      },
  { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CONTEXT_SWITCHES    },
  { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CPU_MIGRATIONS      },
  { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_PAGE_FAULTS     },

  { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_CPU_CYCLES      },
  { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_STALLED_CYCLES_FRONTEND },
  { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_STALLED_CYCLES_BACKEND  },
  { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_INSTRUCTIONS        },
  { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_BRANCH_INSTRUCTIONS },
  { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_BRANCH_MISSES       },

};

因此,到目前为止,man和大多数web都是过时的。

票数 13
EN

Stack Overflow用户

发布于 2013-02-04 00:58:12

我花了几分钟来尝试理解perf。我通过首先记录,然后报告数据(这两个perf工具)找出了缓存未命中。

要查看事件列表,请执行以下操作:

代码语言:javascript
复制
perf list

例如,为了检查末级缓存加载未命中,您需要像这样使用事件LLC-loads-misses

代码语言:javascript
复制
perf record -e LLC-loads-misses ./your_program

然后报告结果

代码语言:javascript
复制
perf report -v
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14674463

复制
相关文章

相似问题

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