我有与这个相关的问题。
我想(以编程方式)测量 AMD EPYC 7742 CPU (Zen2) 上的 L3 命中(访问)和未命中。我在 Ubuntu Server 20.04.2 LTS 上运行 Linux Kernel 5.4.0-66-generic。根据上面链接的问题,事件 rFF04 (L3LookupState) 和 r0106 (L3CombClstrState) 应分别代表 L3 访问和未命中。此外,内核 5.4 应该支持这些事件。
但是,当用 perf 测量它时,我遇到了问题。与上面链接的问题类似,如果我运行
numactl -C 0 -m 0 perf stat -e instructions,cycles,r0106,rFF04 ./benchmark
,我只会测量 0 个值。如果我尝试使用 numactl -C 0 -m 0 perf stat -e instructions,cycles,amd_l3/r8001/,amd_l3/r0106/
,perf 会抱怨“未知术语”。如果我使用 perf 事件名称,即这些事件的 numactl -C 0 -m 0 perf stat -e instructions,cycles,l3_request_g1.caching_l3_cache_accesses, l3_comb_clstr_state.request_miss
perf 输出 <not supported>
。
此外,我实际上想使用 perf 的 C API 来测量这一点。目前,我发送一个类型为
perf_event_attr
且 PERF_TYPE_RAW
设置为 config
的 0x8001
。如何将 amd_l3
PMU 内容放入我的 perf_event_attr
对象中?否则,它相当于 numactl -C 0 -m 0 perf stat -e instructions,cycles,r0106,rFF04 ./benchmark
,它正在测量未定义的值。
非常感谢您的帮助。
简短回答:尝试
-e rFF0F00000040FF04
参数,该参数显示在您的 CPU PPR 文档中。
详细:
也许我可以帮助您解决第第3段中提到的第一个问题。第四段中所说的第二个,我不能。对不起。
由于您的CPU是'Family 23 Model 49',那么我参考了'17h model 31h'amd PPR doc。它说使用
L3Event[0xFF0F00000040FF04]
进行“L3 访问”(0xFF0F00000040FF04
是 64 位,与 amd 文档显示的 L3 Performance Event Select
宽度相同)。此外,man perf-list
还显示 AMD 使用这种具有“32-35”位的格式。虽然在 PPR 文档中,L3PMCx04
没有太多信息,但该文档在 L3 Performance Event Select
中提供了一些有用的信息。
我使用我的cpu ryzen 7 4800h,它是17h_60h系列Renoir处理器(它也是zen2。从这两个源代码one列出了AMD CPU和two的一些编码,zen2的配置应该差不多相同。)没有
amd_l3
支持,这里我使用 ls_dc_accesses
作为表示,729
是我的 cpu 系列 amd doc中
All DC Accesses
的代码,其中 PMCx029
代表 EventCode
8个对应位代表UMask。也可以在上面的代码two中找到(在你的17h_31h家族PPR doc p182,号码是0x430729
):
$ ls /sys/devices/*/format | grep amd_l
$ perf list | grep ls_dc_accesses -A 1
ls_dc_accesses
[Number of accesses to the dcache for load/store references]
$ perf stat -e r729 ls
...
Performance counter stats for 'ls':
1,097,092 r729
$ perf stat -e ls_dc_accesses ls
...
Performance counter stats for 'ls':
974,666 ls_dc_accesses
而且并不是每个人都有一个 epyc cpu,因此可能不方便查看您的问题出在哪里。如果可能的话也许您可以提供更有价值的信息。
希望这可以帮助你。