[英]Perf measure cache misses on AMD CPU
我正在使用 AMD Ryzen 5 1600 CPU,我想使用 Perf 来测量程序的缓存未命中。 当我运行perf stat -e cache-misses./program
perf 总是报告 0 缓存未命中。 运行perf list
给出以下 output:
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/
看起来很有希望,但我实际上不确定它测量的是什么)? 是否有任何参考资料可以解释这些事件是什么?
CPU 风格AMD Ryzen 5 1600
基于 AMD Zen
微架构系列。 Zen
的快速查找告诉我,与此微架构关联的CPUID代码是17h 。
请注意,事件cache-misses
映射到通用硬件事件PERF_COUNT_HW_CACHE_MISSES ,这并非在所有平台上都可用。
根据撰写本文时最新的 linux kernel 源代码(即 5.3.11),可以看出 CPU 系列17h及更高版本不直接支持事件cache-misses
。
请注意,要了解 AMD 的大多数性能监控计数器 ( PMC ) 事件,您需要查阅以下参考资料 -
AMD BIOS 和 Kernel 开发人员指南(我在 CPU 系列 17h 中找不到它)
另一个选项不是传递事件名称,而是传递事件的原始十六进制代码,格式为-e rXXXX
,其中XXXX
是代码。 此处的另一个答案描述了如何为cache-misses
类的事件获取此原始十六进制代码。
您还可以查看此提交以获取有关如何表示缓存未命中的更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.