我试图找出与 perf stat 命令一起使用的事件来计算 AMD Zen 2 处理器上的 L3 缓存访问次数。根据 PPR(http://developer.amd.com/wordpress/media/2017/11/54945_PPR_Family_17h_Models_00h-0Fh.pdf http://developer.amd.com/wordpress/media/2017/11/54945_PPR_Family_17h_Models_00h-0Fh.pdf),第 2.1.13.4.1 节,第 168 页,“[L3 缓存访问] (L3RequestG1)”的事件为 x01,umask 为 x80。据我了解,perf stat 命令中使用的事件将是 r8001。但无论我运行什么负载,以下命令始终将计数返回为零:
性能统计-a -e r8001 --睡眠 10
“系统范围”的性能计数器统计信息:
0 r8001
10.001105322 秒 已用时间
我是否误解了 PPR 或者 [L3 缓存访问] (L3RequestG1) 是否有其他含义?
另外,有没有办法指定 L3 缓存切片来监视 perf 中的事件,因为大多数具有高核心数的较新架构都有多个 L3 切片。
L3 缓存事件只能在 L3 PMU 上计数,如物理助记符(L3PMCx01
)和逻辑助记符(Core::X86::Pmc::L3::L3RequestG1
)您要测量的事件。 L3 PMU 的正式名称为 L3PMC。这与 Intel 处理器上的 cbox PMU 类似。
原始事件的 perf 中的默认 PMU 是cpu
,这是 perf_events 子系统为核心 PMU 提供的名称。使用没有显式 PMU 的原始事件代码指定的事件(例如 r8001)相当于 cpu/r8001/。核心事件0x001代表事件Core::X86::Pmc::Core::FpSchedEmpty
并且此事件的 umask 0x80 未定义(请参见第 2.1.15.4.1 节)。所以你正在计算一个未定义的事件。在这种情况下,如果事件碰巧已实现但未记录,则事件计数可能不为零,具体取决于它是否在被分析的程序执行期间发生。否则,事件计数将为零。 perf_events 不会阻止您计算未定义的事件。
从上游内核版本 v5.4-rc1 开始,perf_events 名称下支持 L3PMCamd_l3
。要确定您使用的内核是否支持此 PMU,请检查是否使用以下命令枚举它ls /sys/devices/*/format
。如果不支持,则无法通过 perf 测量该内核上的 L3 事件。
If amd_l3
支持,您必须显式指定 PMU,如下所示amd_l3/r8001/
or amd_l3/event=0x01,umask=0x80/
将事件计入正确的 PMU。或者您可以只使用 perf 事件名称l3_request_g1.caching_l3_cache_accesses
.
你知道是什么活动吗L3RequestG1
代表?文档仅将其描述为“缓存:L3 缓存访问”,意义不大。在我看来,它计算的交易类型是事件涵盖的交易类型的子集L3LookupState
。第 2.1.15.2 节中的表 19 表示应使用 rFF04 对 L3 访问和未命中进行计数(L3LookupState
)和r0106(L3CombClstrState
), 分别。不要盲目地期望这些事件中的任何一个实际上都算作您想要衡量的任何内容。
您链接的 PPR 不适用于任何 Zen2 处理器,而是适用于某些 Zen 和 Zen+ 处理器(特别是型号 00h-0Fh)。您需要了解处理器型号和系列才能找到正确的 PPR。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)