首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AMD上的Perf度量缓存丢失

AMD上的Perf度量缓存丢失
EN

Stack Overflow用户
提问于 2019-11-16 22:23:10
回答 1查看 1.3K关注 0票数 2

我正在使用AMD Ryzen 5 1600 CPU,我想使用Perf来测量一个程序的缓存缺失。当我运行perf stat -e cache-misses ./program时,perf总是报告0缓存丢失。运行perf list提供以下输出:

代码语言:javascript
复制
  amd_iommu_0/cmd_processed/                         [Kernel PMU event]
  amd_iommu_0/cmd_processed_inv/                     [Kernel PMU event]
  amd_iommu_0/ign_rd_wr_mmio_1ff8h/                  [Kernel PMU event]
  amd_iommu_0/int_dte_hit/                           [Kernel PMU event]
  amd_iommu_0/int_dte_mis/                           [Kernel PMU event]
  amd_iommu_0/mem_dte_hit/                           [Kernel PMU event]
  amd_iommu_0/mem_dte_mis/                           [Kernel PMU event]
  amd_iommu_0/mem_iommu_tlb_pde_hit/                 [Kernel PMU event]
  amd_iommu_0/mem_iommu_tlb_pde_mis/                 [Kernel PMU event]
  amd_iommu_0/mem_iommu_tlb_pte_hit/                 [Kernel PMU event]
  amd_iommu_0/mem_iommu_tlb_pte_mis/                 [Kernel PMU event]
  amd_iommu_0/mem_pass_excl/                         [Kernel PMU event]
  amd_iommu_0/mem_pass_pretrans/                     [Kernel PMU event]
  amd_iommu_0/mem_pass_untrans/                      [Kernel PMU event]
  amd_iommu_0/mem_target_abort/                      [Kernel PMU event]
  amd_iommu_0/mem_trans_total/                       [Kernel PMU event]
  amd_iommu_0/page_tbl_read_gst/                     [Kernel PMU event]
  amd_iommu_0/page_tbl_read_nst/                     [Kernel PMU event]
  amd_iommu_0/page_tbl_read_tot/                     [Kernel PMU event]
  amd_iommu_0/smi_blk/                               [Kernel PMU event]
  amd_iommu_0/smi_recv/                              [Kernel PMU event]
  amd_iommu_0/tlb_inv/                               [Kernel PMU event]
  amd_iommu_0/vapic_int_guest/                       [Kernel PMU event]
  amd_iommu_0/vapic_int_non_guest/                   [Kernel PMU event]
  branch-instructions OR cpu/branch-instructions/    [Kernel PMU event]
  branch-misses OR cpu/branch-misses/                [Kernel PMU event]
  cache-misses OR cpu/cache-misses/                  [Kernel PMU event]
  cache-references OR cpu/cache-references/          [Kernel PMU event]
  cpu-cycles OR cpu/cpu-cycles/                      [Kernel PMU event]
  instructions OR cpu/instructions/                  [Kernel PMU event]
  msr/aperf/                                         [Kernel PMU event]
  msr/irperf/                                        [Kernel PMU event]
  msr/mperf/                                         [Kernel PMU event]
  msr/tsc/                                           [Kernel PMU event]
  stalled-cycles-backend OR cpu/stalled-cycles-backend/ [Kernel PMU event]
  stalled-cycles-frontend OR cpu/stalled-cycles-frontend/ [Kernel PMU event]

  rNNN                                               [Raw hardware event descriptor]
  cpu/t1=v1[,t2=v2,t3 ...]/modifier                  [Raw hardware event descriptor]
   (see 'man perf-list' on how to encode it)

  mem:<addr>[/len][:access]                          [Hardware breakpoint]

运行sudo perf list比上面的事件提供更多的事件。我不知道为什么cache-misses不能工作,因为像branch-misses这样的事件是有效的。也许我必须使用amd_iommu_0事件之一(amd_iommu_0/mem_dte_mis/看起来很有希望,但实际上我不确定它能衡量什么)?是否有解释这些事件的参考资料?

EN

回答 1

Stack Overflow用户

发布于 2019-11-17 14:20:42

AMD Ryzen 5 1600是基于AMDs Zen微体系结构系列的。Zen的快速查找告诉我,与此微体系结构相关联的CPUID代码是17h

请注意,事件cache-misses映射到通用硬件事件,即PERF_COUNT_HW_CACHE_MISSES,这并不是所有平台上都能轻易获得的。

在撰写本文时,根据最新的linux内核来源 ( 5.3.11),可以看出CPU系列17h和更高版本不直接支持事件cache-misses

请注意,要了解AMD的大多数性能监视counter(PMC)事件,您需要参考以下参考-

AMD BIOS和内核开发者指南(我找不到CPU家族17h)

另一个选项是,您可以以-e rXXXX格式传递事件的原始十六进制代码,而不是传递事件的名称,其中XXXX是代码。这里上的另一个答案描述了如何为像cache-misses这样的事件获取原始十六进制代码。

您还可以查看提交,以进一步了解缓存错误是如何表示的。

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

https://stackoverflow.com/questions/58895753

复制
相关文章

相似问题

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