如何解决为什么“ setne%al”在性能注释中使用“很多周期”?
当我看到这个性能报告时,我非常困惑。我已经试了好几次了,这个setne指令总是在函数中发挥最大作用。该功能是一个大功能,下面仅显示该功能的一小部分。
该报告的产生依据:
perf record ./test
perf report --showcpuutilization
我为大多数成本函数之一打开了批注,该批注非常大,图中小块所示:
从中,我们可以看到 setne 指令(从顶部开始的第10行,用红色显示)命中率约为9%。
有人会帮助我,因为我不明白为什么这个“简单的指令”要花费这么多时间?也许与流水线排序有关,而流水线排序又依赖于其他指令?预先感谢!
顺便说一句:该程序是在x86_64体系结构上使用以下命令编译的:
gcc -g -pg -m32 -o test test.c
下面是cpu信息:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) cpu E5-2680 v3 @ 2.50GHz
stepping : 2
microcode : 0x1
cpu MHz : 2494.222
cache size : 16384 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat md_clear spec_ctrl intel_stibp
bogomips : 4988.44
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical,48 bits virtual
power management:
解决方法
只是想在这里提供一个不准确的答案:
- “perf”基于示例工作。在每个样本中,它检查当前 EIP 值并记录。
- 指令的百分比仅指 EIP 显示地址时的样本与示波器的总样本相比。当前一条指令很慢时,EIP 就停留在这里。
- 对于一些现代 CPU,有时报告的热点可能是真正“阻塞点”之前的几条指令。所以通常是 很高兴回头看看是否有任何说明可能会导致 延迟执行。
参考文献:https://perf.wiki.kernel.org/index.php/Tutorial#Sampling_with_perf_record
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。