Linux AMD CPU上的性能测量缓存未命中
我使用的是AMD Ryzen 5 1600 CPU,我想使用Perf来测量程序的缓存未命中率。当我运行Linux AMD CPU上的性能测量缓存未命中,linux,perf,amd-processor,Linux,Perf,Amd Processor,我使用的是AMD Ryzen 5 1600 CPU,我想使用Perf来测量程序的缓存未命中率。当我运行perf stat-e cache misses./programperf总是报告0个缓存未命中。运行perf list将提供以下输出: amd_iommu_0/cmd_processed/ [Kernel PMU event] amd_iommu_0/cmd_processed_inv/ [Kern
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]
amd\u iommu\u 0/cmd\u processed/[内核PMU事件]
amd\u iommu\u 0/cmd\u processed\u inv/[内核PMU事件]
amd\u iommu\u 0/ign\u rd\u wr\u mmio\u 1ff8h/[内核PMU事件]
amd\u iommu\u 0/int\u dte\u hit/[内核PMU事件]
amd\u iommu\u 0/int\u dte\u mis/[内核PMU事件]
amd\u iommu\u 0/mem\u dte\u hit/[内核PMU事件]
amd\u iommu\u 0/mem\u dte\u mis/[内核PMU事件]
amd_iommu_0/mem_iommu_tlb_pde_hit/[内核PMU事件]
amd_iommu_0/mem_iommu_tlb_pde_mis/[内核PMU事件]
amd_iommu_0/mem_iommu_tlb_pte_hit/[内核PMU事件]
amd_iommu_0/mem_iommu_tlb_pte_mis/[内核PMU事件]
amd\u iommu\u 0/mem\u pass\u excl/[内核PMU事件]
amd\u iommu\u 0/mem\u pass\u pretrans/[内核PMU事件]
amd\u iommu\u 0/mem\u pass\u untrans/[内核PMU事件]
amd\u iommu\u 0/mem\u target\u abort/[内核PMU事件]
amd\u iommu\u 0/mem\u trans\u total/[内核PMU事件]
amd\u iommu\u 0/页面\u tbl\u读取\u gst/[内核PMU事件]
amd\u iommu\u 0/页面tbl\u读取\u nst/[内核PMU事件]
amd\u iommu\u 0/页面\u tbl\u读取\u tot/[内核PMU事件]
amd\u iommu\u 0/smi\u blk/[内核PMU事件]
amd_iommu_0/smi_recv/[内核PMU事件]
amd\u iommu\u 0/tlb\u inv/[内核PMU事件]
amd\u iommu\u 0/vapic\u int\u guest/[内核PMU事件]
amd_iommu_0/vapic_int_non_guest/[内核PMU事件]
分支指令或cpu/分支指令/[内核PMU事件]
分支未命中或cpu/分支未命中/[内核PMU事件]
缓存未命中或cpu/缓存未命中/[内核PMU事件]
缓存引用或cpu/缓存引用/[内核PMU事件]
cpu周期或cpu/cpu周期/[内核PMU事件]
指令或cpu/指令/[内核PMU事件]
msr/aperf/[内核PMU事件]
msr/irperf/[内核PMU事件]
msr/mperf/[内核PMU事件]
msr/tsc/[内核PMU事件]
暂停周期后端或cpu/暂停周期后端/[内核PMU事件]
暂停周期前端或cpu/暂停周期前端/[内核PMU事件]
rNNN[原始硬件事件描述符]
cpu/t1=v1[,t2=v2,t3…]/modifier[原始硬件事件描述符]
(有关如何编码,请参见“人员性能列表”)
mem:[/len][:access][Hardware breakpoint]
运行
sudo perf list
会产生比上述事件多得多的事件。我不确定为什么缓存未命中
不起作用,因为像分支未命中
这样的事件正在起作用。也许我必须使用一个amd\u iommu\u 0
事件(amd\u iommu\u 0/mem\u dte\u mis/
看起来很有希望,但我不确定它到底衡量了什么)?是否有任何参考资料可以解释这些事件是什么?CPU风格AMD Ryzen 5 1600
基于AMDsZen
微体系结构系列。快速查找Zen
告诉我与此微体系结构相关的CPUID代码是17h
请注意,事件缓存未命中
映射到通用硬件事件性能计数\u硬件缓存未命中,这在所有平台上都不可用
根据撰写本文时的最新linux内核(5.3.11),可以看出CPU系列17h及以上版本不直接支持事件cache misses
请注意,要了解AMD的大多数性能监视计数器(PMC)事件,您需要参考以下参考资料-
AMD BIOS和内核开发人员指南(我找不到适用于CPU系列17h的指南)
另一个选项不是传递事件名称,而是可以传递事件的原始十六进制代码,格式为-e rXXXX
,其中XXXX
是代码。另一个答案描述了如何为缓存未命中等事件获取原始十六进制代码
您还可以查看提交,以获得有关如何表示缓存未命中的更多详细信息 如果sudo
显示更多事件,您可以设置perf_event_paranoid
,这样您就不需要一直使用perf。那么,您是说此处理器不支持录制缓存未命中事件
?考虑到这是一个如此普遍和常见的事件,这似乎有些奇怪。我不是说不支持缓存未命中。我的意思是,缓存未命中
未映射到我指定的硬件事件,因此不可用。它很可能化名为另一个事件名称。我建议的第二个选择可以引导你实现这一目标。