gpt4 book ai didi

linux - Perf 工具统计输出 : multiplex and scaling of "cycles"

转载 作者:太空狗 更新时间:2023-10-29 11:31:12 25 4
gpt4 key购买 nike

我正在尝试了解“perf”输出中“cycles”事件的多路复用和缩放。

下面是perf工具的输出:

 144094.487583      task-clock (msec)         #    1.017 CPUs utilized
539912613776 instructions # 1.09 insn per cycle (83.42%)
496622866196 cycles # 3.447 GHz (83.48%)
340952514 cache-misses # 10.354 % of all cache refs (83.32%)
3292972064 cache-references # 22.854 M/sec (83.26%)
144081.898558 cpu-clock (msec) # 1.017 CPUs utilized
4189372 page-faults # 0.029 M/sec
0 major-faults # 0.000 K/sec
4189372 minor-faults # 0.029 M/sec
8614431755 L1-dcache-load-misses # 5.52% of all L1-dcache hits (83.28%)
156079653667 L1-dcache-loads # 1083.223 M/sec (66.77%)

141.622640316 seconds time elapsed

我理解内核使用多路复用让每个事件都有机会访问硬件;因此最终输出是估计值。

“循环”事件显示 (83.48%)。我想了解这个数字是如何得出的?

我在 Intel(R) Xeon(R) CPU E5-2698 v4 @ 2.20GHz 上运行“perf”。

最佳答案

Peter Cordes 的回答是正确的。

PMU事件比较复杂,计数器数量有限,有些事件比较特殊,有些逻辑事件可能由多个硬件事件组成,甚至事件之间可能存在冲突。

我相信 Linux 并不知道这些限制,它只是试图从列表中激活事件——更准确地说是事件组。如果它不能激活所有事件,它就会停止,并激活多路复用。每当多路复用计时器结束时,它会有效地轮换事件列表,现在开始激活第二个,然后是第三个,...Linux 不知道它仍然可以激活循环事件,因为它很特殊。

通过在名称后添加 :D 来固定某些事件以赋予它们优先级的选项几乎没有记录。我系统上的示例:

$ perf stat -e cycles -e instructions -e cache-misses -e cache-references -e  L1-dcache-load-misses -e L1-dcache-loads ...

119.444.297.774 cycles:u (55,88%)
130.133.371.858 instructions:u # 1,09 insn per cycle (67,81%)
38.277.984 cache-misses:u # 7,780 % of all cache refs (72,92%)
491.979.655 cache-references:u (77,00%)
3.892.617.942 L1-dcache-load-misses:u # 15,57% of all L1-dcache hits (82,19%)
25.004.563.072 L1-dcache-loads:u (43,85%)

固定指令和周期:

$ perf stat -e cycles:D -e instructions:D -e cache-misses -e cache-references -e  L1-dcache-load-misses -e L1-dcache-loads ...
120.683.697.083 cycles:Du
132.185.743.504 instructions:Du # 1,10 insn per cycle
27.917.126 cache-misses:u # 4,874 % of all cache refs (61,14%)
572.718.930 cache-references:u (71,05%)
3.942.313.927 L1-dcache-load-misses:u # 15,39% of all L1-dcache hits (80,38%)
25.613.635.647 L1-dcache-loads:u (51,37%)

这导致与省略循环和指令相同的多路复用:

$ perf stat -e cache-misses -e cache-references -e  L1-dcache-load-misses -e L1-dcache-loads ...

35.333.318 cache-misses:u # 7,212 % of all cache refs (62,44%)
489.922.212 cache-references:u (73,87%)
3.990.504.529 L1-dcache-load-misses:u # 15,40% of all L1-dcache hits (84,99%)
25.918.321.845 L1-dcache-loads:u

请注意,您还可以对事件进行分组 (-e\{event1,event2\}) - 这意味着事件总是一起读取 - 或者如果不能一起激活组合则根本不读取。

1:总能添加的软件事件存在异常。内核代码的相关部分在kernel/events/core.c中.

关于linux - Perf 工具统计输出 : multiplex and scaling of "cycles",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48414787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com