linux 性能:无法找到“分支加载未命中”度量的有用描述

ki0zmccv  于 2023-01-25  发布在  Linux
关注(0)|答案(2)|浏览(156)

我试图证明,由于分支预测失误而导致的暂停可以通过某种优化来减少,我的直觉告诉我,这可能是由于延迟分支结果的加载相关的暂停周期减少了。
为此,我计划使用Linux Perf实用程序来获取硬件性能计数器值。有一个名为branch-load-misses的相关指标,但是没有提供有用的描述。
有人能确认一下这是否是正确的指标吗?如果不是,请提出一个相关的指标,可能会有所帮助。
谢谢

r1zk6ea1

r1zk6ea11#

Linux perfbranchesbranch-misses计数器,在英特尔x86上,这些计数器Map到BR_INST_RETIRED.ALL_BRANCHESBR_MISP_RETIRED.ALL_BRANCHES,分别测量所有失效的分支与所有失效的预测失误分支。
perf list还包含branch-loadsbranch-load-misses,但没有解释它们的作用。奇怪的是,内核源代码只在PowerPC [1]的上下文中引用它们。在x86上,它们似乎只是Map到branchesbranch-misses,因为它们返回相同的值:

$ perf stat -e branches,branch-misses,branch-loads,branch-load-misses -- /bin/true

 Performance counter stats for '/bin/true':

           415,881      branches
             8,787      branch-misses             #    2.11% of all branches
           415,881      branch-loads
             8,787      branch-load-misses

关于您最初的问题,请记住分支机构的影响来自两个部分:预测失误的分支数量和分支解析时间(计算实际分支结果的时间,可能取决于长延迟负载)。前者可以使用branch-misses事件进行测量。要量化后者,最好使用TopDown分析[2]之类的方法。
[1][https://github.com/torvalds/linux/blob/master/arch/powerpc/perf/generic-compat-pmu.c](https://github.com/torvalds/linux/blob/master/arch/powerpc/perf/generic-compat-pmu.c)
[2][https://perf.wiki.kernel.org/index.php/Top-Down_Analysis](https://perf.wiki.kernel.org/index.php/Top-Down_Analysis)

bnlyeluc

bnlyeluc2#

要测量分支预测与分支预测失误率,可以使用“VTune档案器”。下载链接:https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/vtune-profiler.html#gs.bh5zrq
只需创建包含2个事件的自定义VTune分析:

  • BR_INST_RETIRED.ALL_BRANCHES
  • BR_MISP_RETIRED.ALL_BRANCHES

不过,您需要手动将它们一个一个地相除,才能获得比率。
BR_INST_RETIRED.ALL_BRANCHES:统计所有失效的(宏)分支指令。
BR_MISP_RETIRED.ALL_BRANCHES:统计处理器预测失误的所有失效的分支指令。
当处理器错误地预测分支的目标时,就会发生分支预测失误。
当在执行时发现预测失误时,必须丢弃在错误(推测性)路径中执行的所有指令,并且处理器必须从正确的路径开始读取。
如果您不知道-VTune中的自定义分析可以通过选择任何预定义的分析并按右上角的“自定义...”按钮来创建。
例如,您可以选择“微体系结构探索”,取消选中所有复选框,按“自定义...”,向下滚动到CPU事件表,取消选中所有不需要的/添加需要的事件。
问候

相关问题