我试图分析一个结构非常复杂的现有应用程序。目前,我使用的是perf_event_open,所需的ioctl调用可以启用我感兴趣的事件。
manpage仍然认为PERF_COUNT_HW_INSTRUCTIONS应该谨慎使用-那么在Skylake处理器的情况下哪一个应该是首选的呢?可能是特定的Intel PMU
发布于 2020-01-02 19:10:00
perf_event_open手册http://man7.org/linux/man-pages/man2/perf_event_open.2.html提到了PERF_COUNT_HW_INSTRUCTIONS:
PERF_COUNT_HW_INSTRUCTIONS退休指令。小心,这些可能会受到各种问题的影响,最显著的是硬件中断计数。
我认为这意味着可以使用COUNT_HW_INSTRUCTIONS (而且几乎在任何地方都支持它)。但是,由于中断或其他逻辑的干扰,在几次运行中,某些代码片段的COUNT_HW_INSTRUCTIONS的确切值可能略有不同。
因此,在大多数CPU上使用事件PERF_COUNT_HW_INSTRUCTIONS和PERF_COUNT_HW_CPU_CYCLES是安全的。Linux内核中的perf_events子系统将COUNT_HW_CPU_CYCLES映射到一些更适合当前使用的CPU及其PMU的原始事件。
根据您的目标,您应该尝试获取代码片段的PERF_COUNT_HW_INSTRUCTIONS值的一些统计信息。您还可以使用一些简单的程序通过几次运行perf stat来检查此计数器的稳定性:
perf stat -e cycles:u,instructions:u /bin/echo 123
perf stat -e cycles:u,instructions:u /bin/echo 123
perf stat -e cycles:u,instructions:u /bin/echo 123或者使用perf stat的集成重复功能:
perf stat --repeat 10 -e cycles:u,instructions:u /bin/echo 123我有+-10指令事件变化(小于0.1%)的20万总指令执行,所以它是非常稳定的。对于周期,我有5%的变化,所以它应该是循环事件标记的谨慎警告。
https://stackoverflow.com/questions/59528508
复制相似问题