AMD CPU上的性能度量缓存未命中

问题描述 投票:0回答:1

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

  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/看起来很有希望,但我实际上不确定它的作用)?是否有任何参考说明这些事件是什么?

linux perf amd-processor
1个回答
0
投票

CPU风格AMD Ryzen 5 1600基于AMD Zen微体系结构系列。快速查找Zen会告诉我与此微体系结构关联的CPUID代码为17h

请注意,事件cache-misses映射到通用硬件事件PERF_COUNT_HW_CACHE_MISSES,但并非在所有平台上都可用。

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

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

[AMD BIOS和内核开发人员指南(对于CPU系列17h我找不到)

另一个选项是传递事件的原始十六进制代码,而不是传递事件的名称,可以采用-e rXXXX格式,其中XXXX是代码。关于here的另一个答案描述了如何为cache-misses之类的事件获取此原始十六进制代码。

© www.soinside.com 2019 - 2024. All rights reserved.