Simpleperf | Simpleperf 事件分析

1 篇文章 0 订阅
1 篇文章 0 订阅

一、list帮助文档

输入命令:./simpleperf help list                             

Usage: simpleperf list [options] [hw|sw|cache|raw|tracepoint]

       List all available event types.

       Filters can be used to show only event types belong to selected types:

         hw          hardware events

         sw           software events

         cache        hardware cache events

         raw          raw cpu pmu events

         tracepoint   tracepoint events

         cs-etm       coresight etm instruction tracing events

 

二、事件分类

基于性能分析,可以进行算法优化(空间复杂度和时间复杂度权衡)、代码优化(提高执行速度、减少内存占用)。

评估程序对硬件资源的使用情况,例如各级cache的访问次数、各级cache的丢失次数、流水线停顿周期、前端总线访问次数等。

评估程序对操作系统资源的使用情况,系统调用次数、上下文切换次数、任务迁移次数。

 

    1. hw   hardware events

Hardware Event由PMU部件产生,在特定的条件下探测性能事件是否发生以及发生的次数。比如cache命中。

    2. sw    software events

Software Event是内核生的事件,分布在各个功能模中,统计和操作系相关性能事件

    3. tracepoint  tracepoint events

tracepoints是散落在内核源码中的一些hook,它们可以在特定的代码被执行到时触发,这一特定可以被各种trace/debug工具所使用。

Tracepoint Event是内核中静态tracepoint所触发的事件,这些tracepoint用来判断程序运行期间内核的行为细节,比如slab分配器的分配次数等。

 

三、分析重要事件

  • cache相关

branch-load-misses                                              

分支预测读取失败次数

branch-loads                                                    

分支预测读取次数

branch-store-misses                                             

分支预测写入失败次数

branch-stores                                                   

分支预测写入次数

L1-dcache-load-misses                                            

一级数据缓存读取失败次数

L1-dcache-loads                                                  

一级数据缓存读取次数

L1-dcache-store-misses                                           

一级数据缓存写入失败次数

L1-dcache-stores   

一级数据缓存写入次数

cache-misses

cache 失效的次数

cache-references

cache 命中的次数

raw-l1d-cache                                                   

1级数据缓存访问

raw-l1d-cache-allocate                                           

Attributable Level 1 data cache allocation without refill

raw-l1d-cache-inval                                             

无效的可归属的一级数据缓存

raw-l1d-cache-lmiss-rd                                           

一级数据高速缓存长时读取未命中

raw-l1d-cache-rd                                                

读取一级数据缓存

raw-l1d-cache-refill                                             

一级数据缓存重新填充

raw-l1d-cache-refill-inner                                       

归因一级数据缓存重新填充,内部

raw-l1d-cache-refill-outer                                       

归因一级数据缓存重新填充,外部

raw-l1d-cache-refill-rd                                          

归因一级数据缓存重新填充,读取

raw-l1d-cache-refill-wr                                          

归因一级数据缓存重新填充,写入

raw-l1d-cache-wb                                                

归因于一级数据缓存写回

raw-l1d-cache-wb-clean                                           

一级数据缓存回写,清理和一致性

raw-l1d-cache-wb-victim                                          

归因一级数据高速缓存写回,受害者

raw-l1d-cache-wr              

归因一级数据缓存访问,写入

raw-l1i-cache                                                   

归因一级指令缓存访问

raw-l1i-cache-lmiss                                             

一级指令高速缓存长时间未命中

raw-l1i-cache-refill    

一级指令高速缓存重新填充

raw-l2d-cache                                                   

二级数据缓存访问

raw-l2d-cache-allocate                                           

Attributable Level 2 data cache allocation without refill

raw-l2d-cache-inval                                             

无效的可归属的二级数据缓存

raw-l2d-cache-lmiss-rd                                           

二级数据高速缓存长时读取未命中

raw-l2d-cache-rd                                                

读取二级数据缓存

raw-l2d-cache-refill                                             

二级数据缓存重新填充

raw-l2d-cache-refill-rd                                          

归因二级数据缓存重新填充,读取

raw-l2d-cache-refill-wr                                          

归因二级数据缓存重新填充,写入

raw-l2d-cache-wb                                                

归因于二级数据缓存写回

raw-l2d-cache-wb-clean                                           

二级数据缓存回写,清理和一致性

raw-l2d-cache-wb-victim                                          

归因二级数据高速缓存写回,受害者

raw-l2d-cache-wr

归因二级数据缓存访问,写入

raw-l2i-cache                                                   

归因二级指令缓存访问

raw-l2i-cache-lmiss                                              

二级指令高速缓存长时间未命中

raw-l2i-cache-refill  

二级指令缓存重新填充

raw-l3d-cache                                                   

三级数据缓存访问

raw-l3d-cache-allocate                                           

归因三级数据或统一缓存分配而无需重新填充

raw-l3d-cache-inval                                             

归因3级数据或统一缓存访问,无效

raw-l3d-cache-lmiss-rd                                           

3级数据高速缓存长时读取未命中

raw-l3d-cache-rd                                                

读取二级数据缓存

raw-l3d-cache-refill                                             

二级数据缓存重新填充

raw-l3d-cache-refill-rd                                          

归因3级数据或统一缓存重新填充,已读取

raw-l3d-cache-refill-wr                                          

归因于3级数据或统一缓存重新填充,写入

raw-l3d-cache-wb                                                

归因于3级数据或统一缓存回写

raw-l3d-cache-wb-clean                                           

归因于3级数据或统一缓存回写,缓存清除

raw-l3d-cache-wb-victim                                          

归因于第3级数据或统一高速缓存写回,受害者

raw-l3d-cache-wr                     

归因于3级数据或统一缓存访问,写入

raw-ll-cache                                                    

可归因的末级数据缓存访问

raw-ll-cache-miss                                               

归因于末级数据或统一高速缓存未命中

raw-ll-cache-miss-rd                                             

归因于末级缓存读取未命中

raw-ll-cache-rd      

归因于末级缓存读取

  • branch相关

branch-load-misses                                               

分支预测读取失败次数

branch-loads                                                    

分支预测读取次数

branch-store-misses                                             

分支预测写入失败次数

branch-stores                                                  

分支预测写入次数

branch-misses                                                  

分支预测失败的次数

raw-br-immed-retired                                             

体系结构上执行的指令,立即分支

raw-br-immed-spec                                                

分支以推测方式执行,立即分支

raw-br-indirect-spec                                             

推测执行的分支,间接分支

raw-br-mis-pred                                                 

预测错误或未预测的分支

raw-br-mis-pred-retired                                          

体系结构上执行的指令,预测错误分支

raw-br-pred                                                      

可预测的分支推测执行

raw-br-retired                                                  

指令架构上执行的指令,分支

raw-br-return-retired                                            

在体系结构上执行指令,条件代码检查通过,过程返回

raw-br-return-spec                                               

分支被推测执行,过程返回

  • TLB

page-faults                                                    

缺页异常的次数

raw-dtlb-walk                                                  

归因指令TLB访问(至少有一个translation table walk)

raw-itlb-walk                                                   

归因数据或统一的TLB访问(至少有一个translation table walk)

raw-l1d-tlb                                                      

归因于1级数据或统一的TLB访问

raw-l1d-tlb-rd                                                  

归因于1级数据或统一的TLB访问,已读取

raw-l1d-tlb-refill                                              

归因于1级数据的TLB重新填充

raw-l1d-tlb-refill-rd                                            

归因于1级数据的TLB重新填充,已读取

raw-l1d-tlb-refill-wr                                            

归因于1级数据的TLB重新填充,已写入

raw-l1d-tlb-wr                                                

归因于1级数据或统一的TLB访问,写入

raw-l1i-tlb                                                     

归因于1级指令缓存访问

raw-l1i-tlb-refill                                                

归因于1级数据或统一的TLB访问,已读取

raw-l2d-tlb                                                     

归因于2级数据或统一的TLB访问

raw-l2d-tlb-rd                                                  

归因于2级数据或统一的TLB访问,已读取

raw-l2d-tlb-refill                                              

可归因的2级数据或统一的TLB重新填充

raw-l2d-tlb-refill-rd                                            

归因于2级数据或统一的TLB重新填充,已读取

raw-l2d-tlb-refill-wr                                            

归因于2级数据或统一的TLB重新填充,写入

raw-l2d-tlb-wr                                                 

归因于2级数据或统一的TLB访问,写入

raw-l2i-tlb                                                      

归因于2级指令的TLB访问

raw-l2i-tlb-refill                                                

归因于2级指令的TLB重新填充

 

当应用程序请求的页面尚未建立、请求的页面不在内存中,或者请求的页面虽然在内存中,但物理地址和虚拟地址的映射关系尚未建立时,都会触发一次缺页异常。另外TLB不命中,页面访问权限不匹配等情况也会触发缺页异常。

 

Translation Table Walk:

  • pipeline
  • memory

raw-mem-access                                                  

数据存储器访问

raw-mem-access-rd                                               

数据存储器访问,读取

raw-mem-access-wr                                               

数据存储器访问,写入

raw-memory-error                                                 

本地内存错误

翻译部分有错误,未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值