X86 使用“英特尔上一个分支”记录的开销是多少?
最后一个分支记录是指寄存器对(MSR)的集合,这些寄存器对存储与最近执行的分支相关的源地址和目标地址。文档中有更多信息,以备您感兴趣X86 使用“英特尔上一个分支”记录的开销是多少?,x86,intel,branch-prediction,X86,Intel,Branch Prediction,最后一个分支记录是指寄存器对(MSR)的集合,这些寄存器对存储与最近执行的分支相关的源地址和目标地址。文档中有更多信息,以备您感兴趣 a) 有人能告诉我们LBR会在多大程度上降低CPU和IO密集型通用程序的执行速度吗 b) LBR跟踪打开时是否会关闭分支预测 该论文(由Arium workers、Craig Pedersen和Jeff Acampora于2012年4月29日撰写)列出了分支追踪的三种变体: 上一个分支记录(LBR)调试CTLMSR中的标志以及相应的LastBranchToIP
- a) 有人能告诉我们LBR会在多大程度上降低CPU和IO密集型通用程序的执行速度吗
- b) LBR跟踪打开时是否会关闭分支预测
- 上一个分支记录(LBR)调试CTLMSR中的标志以及相应的LastBranchToIP和LastBranchFromIP MSR以及LastExceptionToIP和LastExceptionFromIP MSR
- 分支跟踪存储(BTS)使用缓存作为RAM或系统DRAM
- 体系结构事件跟踪(AET)从XDP端口捕获并存储 在外部连接的目标探头中
perf branch
presentation给出了一些关于BTS组织的提示:存在BTS缓冲区,其中包含“from”、“to”字段和“predicted flag”。因此,使用BTS时不会关闭分支预测。此外,当BTS缓冲区填充到最大大小时,会生成中断。内核中的BTS处理模块(perf_事件子系统或btrax内核模块)应在发生此类中断时将数据从BTS缓冲区复制到其他位置
因此,在BTS模式下,有两种开销来源:缓存/内存存储和BTS缓冲区溢出引起的中断
AET使用外部代理保存调试和跟踪数据。此代理通过扩展调试端口(XDP)连接,并与目标内探测器(ITP)接口。根据本文,AET的开销“会对系统性能产生显著影响,可能会大几个数量级”,因为AET可以生成/捕获更多类型的事件。但收集的数据存储在调试平台之外
论文的“摘要”说:
LBR没有开销,但非常浅(4-16个分支位置,具体取决于
在CPU上)。跟踪数据在重置后立即可用
BTS更深入,但对CPU性能有影响,需要
车载RAM。一旦CAR初始化,跟踪数据就可用
AET需要特殊的ITP硬件,并非在所有CPU上都可用
架构。它的优点是将跟踪数据存储在板外
您将如何使用英特尔LBR?我认为,LBR的记录开销很小,预测功能也没有关闭。我只是在程序开始时启用LBR,然后在程序结束时禁用它。我也认为开销应该相对较小,至少与软件工具相比。但是,如果有一些关于管理费用的官方文件的话,这将是很有帮助的。官方文件的唯一地方是感谢分享论文和总结要点!