- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,我发现实际上 perf(或 pprof)可能会显示在反汇编 View 指令时间附近,实际上并没有花费这个时间。真正需要这段时间的真正指令就在它之前。我知道一个模糊的解释,这是由于 CPU 中的指令流水线而发生的。但是,我想了解以下内容:
最佳答案
(快速而不是 super 详细的答案;如果有人想写一个更详细的答案会更好)。perf
只使用 CPU 自己的硬件性能计数器,当计数器向下计数到零或达到阈值时,它们可以进入记录事件的模式。
引发中断或将事件写入内存中的缓冲区(使用 PEBS 精确事件)。该事件将包括 CPU 选择与事件关联的代码地址(即引发中断的点),即使对于像 cycles
这样的事件也是如此。不像 instructions
本质上没有关联的特定指令。当计数器回绕时,乱序的 exec 后端可能有几百条指令在运行,但必须为任何给定的样本选择一个。
通常,CPU“责怪”等待缓慢产生结果的指令,而不是产生结果的指令,尤其是缓存未命中加载。
有关 Intel x86 CPU 的示例,请参阅 Why is this jump instruction so expensive when performing pointer chasing?
这似乎也取决于在引发中断时让 ROB 中的最后一条指令退出的效果。 (英特尔 CPU 至少看起来确实这样做了;即使指令可能很慢,也能确保向前推进。)
一般来说,当后面的指令被指责而不是实际花时间的指令时,可能会出现“偏差”,这可能有不同的原因。 (也许特别是对于非核心事件,因为它们与核心时钟异步发生。)
其他相关问答以及有趣的例子或其他事情
关于performance - perf record(或其他分析器)如何选择将哪个指令计为花费时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69351189/
我一直在读一本分配给类(class)的书,它提到数组访问需要 O(1) 时间。我意识到这非常快(也许尽可能快),但是如果您有一个循环必须多次引用它,那么分配一个临时变量以在数组中查找值有什么好处吗?或
我一直试图找出为什么这个查询花了这么长时间。以前,它的执行时间约为 150 毫秒到 200 毫秒,但现在需要 25 秒或更长时间。这是从昨晚到今天之间的事。唯一改变的就是将数据添加到表中。 根据下面的
我有一个 ng repeat 重复数据。 - data.image(src)部分为null,src=null的不再重复。 我用一个简单的 ng-if 解决了它。
我有一个包含大量测试的 Laravel 项目。我正在使用 pcov 来计算代码覆盖率,大约需要 4 分钟。但是 pcov 不支持分支覆盖,所以我决定使用 xdebug。 使用 xdebug 测试执行,
我已经被这个问题困扰了一段时间了,我被难住了。 Automapper 需要 4 秒来映射 19 个对象。在我的机器(24GB 内存,3.6Ghz i7)上,该操作应该花费毫秒或纳秒。 这是映射调用。
我有一个包含大量测试的 Laravel 项目。我正在使用 pcov 来计算代码覆盖率,大约需要 4 分钟。但是 pcov 不支持分支覆盖,所以我决定使用 xdebug。 使用 xdebug 测试执行,
我在机器 A 上有一个 java 进程通过 TCP 与机器 B 上的 Tomcat 通信。 TCP 连接(只是 syn-syn/ack 交换)始终需要 100 毫秒的数量级,而 ping 请求需要 1
我做了一项任务,从 sqlserver 获取超过 200 万条记录并将它们填充到 Asp.net GridView 中。 问题是,查询需要超过 2 分钟才能获得记录,而我的查询现在已经完全优化。 当我
我希望将 165 秒变成 2:40 而不是 0:2:45 函数需要能够适应秒值的大小。 我知道有无数种方法可以做到这一点,但我正在寻找一种干净的方法来做到这一点,除了 jQuery 之外没有任何外部库
我是一名优秀的程序员,十分优秀!