Intel Pin:测量空仪器开销
Posted
技术标签:
【中文标题】Intel Pin:测量空仪器开销【英文标题】:Intel Pin: measuring empty instrumentation overhead 【发布时间】:2018-11-09 15:37:21 【问题描述】:我想测量我的 Pintool 在执行“空检测”的情况下如何恶化可执行文件的执行时间。
基本上,在我的 Pintool 中,我得到了一个回调,每次加载图像时都会调用该回调,进而插入特定例程的分析函数。
所以我正在考虑使用两种操作模式来测量“空仪器”开销:
-
有一个空的Image回调函数,在每张图片加载时调用,而不是普通的
需要调用空的例程分析函数而不是普通函数
这种方法可行吗?有我不知道的更好的解决方案吗?
【问题讨论】:
【参考方案1】:Pin 执行多项优化以生成非常高效的检测代码。特别是,空的分析例程肯定会内联到应用程序例程中。 C/C++ 中的空函数很可能被编译为一条指令(在 x86 上,它是某种形式的 ret
)。 Pin 可能能够识别并完全删除该指令,从而使您零检测。您可以通过比较没有任何仪器的性能和使用空分析例程的性能来确定 Pin 是否删除了ret
。如果差异为零,则 Pin 很有可能消除了该指令。虽然据我所知,这没有记录。
【讨论】:
如果我使用的不是空回调,而是执行非常简单的操作且开销可忽略不计的回调,那么仍然会有零检测,例如增加一个计数器? @Simus 回调不会被内联,只有分析例程。如果您在分析例程中增加全局计数器或线程局部计数器,那么就会有一些检测。以上是关于Intel Pin:测量空仪器开销的主要内容,如果未能解决你的问题,请参考以下文章