Linux 性能:理解为什么特定指令是;热的;

Linux 性能:理解为什么特定指令是;热的;,linux,performance,assembly,profiling,perf,Linux,Performance,Assembly,Profiling,Perf,当我使用perf评测时,通常会看到1或2条“hot”指令 perf的默认度量是周期,因此perf实际上告诉我这些指令在周期方面的成本很高 我试图找出如何找出一条特定指令需要很多周期的原因 可能有很多原因: 缓存未命中 分支预测失败 其他种类的摊位 比如说, 在分析代码时,我看到此指令被标记为红色: lea -0xf(%rsi),%eax 我切换到另一个指标一级数据缓存加载或缓存未命中 但是,在任何这些指标下,该指令都没有标记为红色 因此,除了盲目地搜索所有指标之外,我如何才能找出特定指令

当我使用perf评测时,通常会看到1或2条“hot”指令

perf的默认度量是周期,因此perf实际上告诉我这些指令在周期方面的成本很高

我试图找出如何找出一条特定指令需要很多周期的原因

可能有很多原因:

  • 缓存未命中
  • 分支预测失败
  • 其他种类的摊位
  • 比如说,

    在分析代码时,我看到此指令被标记为红色:

    lea    -0xf(%rsi),%eax
    
    我切换到另一个指标一级数据缓存加载缓存未命中

    但是,在任何这些指标下,该指令都没有标记为红色

    因此,除了盲目地搜索所有指标之外,我如何才能找出特定指令在使用perf的周期方面成本高昂的原因呢

    谢谢


    Itay

    像这样的简单算术指令可以使用大量周期的原因只有一个,那就是它执行的次数很多。换句话说,它必须是一个循环的一部分。请注意,由于perf使用基于样本的方法测量周期,因此显示的数字可能会产生误导。@RossRidge-因此LEA实际上只计算内存,而不接触内存。。。我明白了……不过,这只是一个例子,关于如何放大内存访问操作的任何想法——只需尝试所有相关指标?有时错误的指令可能是红色的(多条指令的偏移量;或者标记为某些值的使用缓慢,但不是从内存加载值);请在您的问题旁边添加说明。rsi是如何产生的?