我正在使用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/看起来很有希望,但实际上我不确定它能衡量什么)?是否有解释这些事件的参考资料?
发布于 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这样的事件获取原始十六进制代码。
您还可以查看这提交,以进一步了解缓存错误是如何表示的。
https://stackoverflow.com/questions/58895753
复制相似问题