如何从 perf stats 解释 LLC-Load-Misses
How to interpret LLC-Load-Misses from perf stats
我在
上发布了类似上下文的问题
在解决了一些问题后,我降低了抖动。
我会描述我的场景。
我的内核引导参数如下所示:
nmi_watchdog=0 intel_idle.max_cstate=0 processr.max_cstate=0 nohz_full=7-11 isolcpus=7-11 mce=off rcu_nocbs=7-11 nosoftlockup cpuidle.off=1 powersave=off nonmi_ipi nnwatchdog
我有一个内核模块,它负责以给定的时间间隔发送一些数据包(这里我是每 1ms 发送一次)。
- 我有一个数据包生成器固定到 CPU 9
- 我有一个内核模块(或 Kthread)固定到 CPU 8
- 我已将 rx 队列的 IRQ 关联设置为 CPU 10
因此,我执行了以下命令来获取性能统计信息
sudo ./perf stat -a -d -I 1000 --cpu=8 taskset -c 9 ./test.sh
下面,我发布了我得到的输出的摘录。从上面的命令中,我试图分析我的 CPU Core 8.
的事件
所以,这样一来,这些组件就应该不会互相干扰了。
5.002780500 1000.296809 cpu-clock (msec) # 1.000 CPUs utilized
5.002780500 0 context-switches # 0.000 K/sec
5.002780500 0 cpu-migrations # 0.000 K/sec
5.002780500 0 page-faults # 0.000 K/sec
5.002780500 88,531 cycles # 0.000 GHz
5.002780500 29,738 instructions # 0.33 insn per cycle
5.002780500 6,639 branches # 0.007 M/sec
5.002780500 118 branch-misses # 1.72% of all branches
5.002780500 7,677 L1-dcache-loads # 0.008 M/sec
5.002780500 318 L1-dcache-load-misses # 4.04% of all L1-dcache hits
5.002780500 196 LLC-loads # 0.196 K/sec
5.002780500 169 LLC-load-misses # 84.08% of all LL-cache hits
Round 0
6.330091222 1327.302728 cpu-clock (msec) # 1.327 CPUs utilized
6.330091222 1 context-switches # 0.001 K/sec
6.330091222 1 cpu-migrations # 0.001 K/sec
6.330091222 0 page-faults # 0.000 K/sec
6.330091222 2,401,268,484 cycles # 2.276 GHz
6.330091222 1,700,438,285 instructions # 4.25 insn per cycle
6.330091222 400,075,413 branches # 379.216 M/sec
6.330091222 9,587 branch-misses # 0.01% of all branches
6.330091222 300,135,708 L1-dcache-loads # 284.487 M/sec
6.330091222 12,520 L1-dcache-load-misses # 0.03% of all L1-dcache hits
6.330091222 6,865 LLC-loads # 0.007 M/sec
6.330091222 5,177 LLC-load-misses # 394.69% of all LL-cache hits
Round 1
7.343309295 1013.219838 cpu-clock (msec) # 1.013 CPUs utilized
7.343309295 2 context-switches # 0.002 K/sec
7.343309295 1 cpu-migrations # 0.001 K/sec
7.343309295 0 page-faults # 0.000 K/sec
7.343309295 2,401,313,050 cycles # 2.289 GHz
7.343309295 1,700,446,830 instructions # 2.48 insn per cycle
7.343309295 400,076,590 branches # 381.375 M/sec
7.343309295 9,722 branch-misses # 0.01% of all branches
7.343309295 300,137,590 L1-dcache-loads # 286.108 M/sec
7.343309295 12,429 L1-dcache-load-misses # 0.01% of all L1-dcache hits
7.343309295 6,787 LLC-loads # 0.006 M/sec
7.343309295 5,167 LLC-load-misses # 246.77% of all LL-cache hits
单词'Round "x"'表示我们每毫秒发送1个数据包,因此每毫秒发送1000个数据包。
我无法从上面的转储中理解的是LLC-load-misses
。或者,准确地说,我找不到深入挖掘这个问题根源的方法。
关于这个问题的任何意见都会非常有帮助。
此致,
库沙尔.
LLC-load-misses
的数量应解释为在测量的时间间隔内末级缓存(通常是现代英特尔芯片的 L3)中丢失的加载数量。
在这个级别上,我相信进入同一缓存行的负载已经被行填充缓冲区"combined":如果你访问多个值,所有相同的缓存行都没有出现在 LLC 中,从您的过程的角度来看,这些都是 "miss"(使用这些值中的任何一个都将等待完整的未命中持续时间),但我相信这仅算作一次未命中 LLC-load-misses
计数器。
我在
在解决了一些问题后,我降低了抖动。
我会描述我的场景。
我的内核引导参数如下所示:
nmi_watchdog=0 intel_idle.max_cstate=0 processr.max_cstate=0 nohz_full=7-11 isolcpus=7-11 mce=off rcu_nocbs=7-11 nosoftlockup cpuidle.off=1 powersave=off nonmi_ipi nnwatchdog
我有一个内核模块,它负责以给定的时间间隔发送一些数据包(这里我是每 1ms 发送一次)。
- 我有一个数据包生成器固定到 CPU 9
- 我有一个内核模块(或 Kthread)固定到 CPU 8
- 我已将 rx 队列的 IRQ 关联设置为 CPU 10
因此,我执行了以下命令来获取性能统计信息
sudo ./perf stat -a -d -I 1000 --cpu=8 taskset -c 9 ./test.sh
下面,我发布了我得到的输出的摘录。从上面的命令中,我试图分析我的 CPU Core 8.
的事件所以,这样一来,这些组件就应该不会互相干扰了。
5.002780500 1000.296809 cpu-clock (msec) # 1.000 CPUs utilized
5.002780500 0 context-switches # 0.000 K/sec
5.002780500 0 cpu-migrations # 0.000 K/sec
5.002780500 0 page-faults # 0.000 K/sec
5.002780500 88,531 cycles # 0.000 GHz
5.002780500 29,738 instructions # 0.33 insn per cycle
5.002780500 6,639 branches # 0.007 M/sec
5.002780500 118 branch-misses # 1.72% of all branches
5.002780500 7,677 L1-dcache-loads # 0.008 M/sec
5.002780500 318 L1-dcache-load-misses # 4.04% of all L1-dcache hits
5.002780500 196 LLC-loads # 0.196 K/sec
5.002780500 169 LLC-load-misses # 84.08% of all LL-cache hits
Round 0
6.330091222 1327.302728 cpu-clock (msec) # 1.327 CPUs utilized
6.330091222 1 context-switches # 0.001 K/sec
6.330091222 1 cpu-migrations # 0.001 K/sec
6.330091222 0 page-faults # 0.000 K/sec
6.330091222 2,401,268,484 cycles # 2.276 GHz
6.330091222 1,700,438,285 instructions # 4.25 insn per cycle
6.330091222 400,075,413 branches # 379.216 M/sec
6.330091222 9,587 branch-misses # 0.01% of all branches
6.330091222 300,135,708 L1-dcache-loads # 284.487 M/sec
6.330091222 12,520 L1-dcache-load-misses # 0.03% of all L1-dcache hits
6.330091222 6,865 LLC-loads # 0.007 M/sec
6.330091222 5,177 LLC-load-misses # 394.69% of all LL-cache hits
Round 1
7.343309295 1013.219838 cpu-clock (msec) # 1.013 CPUs utilized
7.343309295 2 context-switches # 0.002 K/sec
7.343309295 1 cpu-migrations # 0.001 K/sec
7.343309295 0 page-faults # 0.000 K/sec
7.343309295 2,401,313,050 cycles # 2.289 GHz
7.343309295 1,700,446,830 instructions # 2.48 insn per cycle
7.343309295 400,076,590 branches # 381.375 M/sec
7.343309295 9,722 branch-misses # 0.01% of all branches
7.343309295 300,137,590 L1-dcache-loads # 286.108 M/sec
7.343309295 12,429 L1-dcache-load-misses # 0.01% of all L1-dcache hits
7.343309295 6,787 LLC-loads # 0.006 M/sec
7.343309295 5,167 LLC-load-misses # 246.77% of all LL-cache hits
单词'Round "x"'表示我们每毫秒发送1个数据包,因此每毫秒发送1000个数据包。
我无法从上面的转储中理解的是LLC-load-misses
。或者,准确地说,我找不到深入挖掘这个问题根源的方法。
关于这个问题的任何意见都会非常有帮助。
此致, 库沙尔.
LLC-load-misses
的数量应解释为在测量的时间间隔内末级缓存(通常是现代英特尔芯片的 L3)中丢失的加载数量。
在这个级别上,我相信进入同一缓存行的负载已经被行填充缓冲区"combined":如果你访问多个值,所有相同的缓存行都没有出现在 LLC 中,从您的过程的角度来看,这些都是 "miss"(使用这些值中的任何一个都将等待完整的未命中持续时间),但我相信这仅算作一次未命中 LLC-load-misses
计数器。