我正在编写一个Pin工具,它似乎增加了大量的时间开销。
我的工具必须用指令的粒度来测试程序。
为了检查开销源,我编写了一个小型Pin-工具,它只对指令进行计数。
测试每条指令(就像我必须在工具中做的那样)。
此外,我还编写了一个检查注册表值的简单程序(C代码大约有20行)。
(运行在i7 CPU上,Windows 7)
在运行简单程序时,几乎需要立即返回。
当运行Pin工具init和程序而没有任何工具时,需要2.35+-秒。
使用简单的指令工具运行Pin工具时,需要5-6秒。
指示数:3 107 098。
我也在一个更复杂的代码上尝试过它,一个循环在递归函数上的程序。
没有针,大约需要1分钟。
使用Pin (只计算指令)大约需要7分钟。
指示数目为:1 850 919 077
这是预期的开销吗?
发布于 2014-09-17 11:53:07
嗯,如果不知道你在做什么样的仪器,就不可能知道这些数字是否会被期望。然而,当涉及到PIN的开销时,有几个因素值得考虑。
如果分析代码(传递给*_InsertCall的函数指针)包含对其他函数、循环或条件语句的调用,则可能需要上下文切换。这将大大增加工具的执行时间。如果您阅读了PIN用户指南--我确信这是简要讨论过的--在有关PIN的文章中也提到了这一点。
另一个可能更容易理解的因素是,您添加的分析代码至少会导致执行时间增加,与编译后的分析代码中的指令数量相等,前提是您正在对指令的粒度进行检测。如果分析代码中有循环,这当然会增加得更多。(这有点简化,因为我假设每条指令都需要相同的执行时间。)
由PIN引起的减速可从2倍(这是一个相当理论上的减速)到数万倍不等。如果你的工具只造成了7倍的减速,我会说它非常快。
https://stackoverflow.com/questions/25850678
复制相似问题