我对程序的不同部分的速度进行基准测试很感兴趣。
我需要知道精确到微秒的平均速度是多少。我不知道为什么我写的脚本会有问题。
它应该能够在任何地方开始,在任何地方结束。当我试图在一个可能并行运行多达四次的进程上启动它时,我遇到了一个问题。
有没有人已经有了解决这个问题的办法?
编辑:
如果有人能提供一个脚本来做这件事,我愿意给一个赏金。它 * 需要 * 通过多个进程来繁殖。我不能接受像定时器这样的函数...至少在我所看到的实现中是这样。它只遍历一个进程,即使这样,一些主要的编辑对于一个完整的程序的完整测试是必要的。希望我说得足够清楚。
4条答案
按热度按时间62lalag41#
下面介绍如何使用eprof,这可能是最简单的解决方案:
首先,您需要启动它,就像大多数应用程序一样:
Eprof支持两种分析模式。你可以调用它并要求分析某个函数,但我们不能使用它,因为其他进程会把一切搞砸。我们需要手动启动它的分析并告诉它何时停止(顺便说一句,这就是为什么你不会有一个简单的脚本)。
这告诉eprof分析将从shell运行和产生的所有内容。新进程将包括在这里。我将运行我拥有的某个任意多处理函数,该函数将产生大约4个进程,它们相互通信几秒钟:
现在,我们可以告诉eprof在函数运行完毕后停止分析。
我们需要日志。默认情况下,Eprof会将它们打印到屏幕上。您可以要求它也将日志记录到一个带有
eprof:log(File)
的文件中。然后您可以告诉它分析结果。我们告诉它将所有进程的运行时间折叠到一个带有选项total
的表中(更多选项请参见手册):您可以看到,大部分时间(50%)都花在dict:store/3上。16.67%用于输出结果,另外16.67%用于erl_eval(这就是为什么在shell中运行短函数--解析它们比运行它们要长)。
然后,您可以从那里开始。这是使用Erlang分析运行时间的基础。请小心处理,eprof可能会给生产系统或运行时间过长的函数带来相当大的负担。尤其是在生产系统上。
nkhmeac62#
您可以使用eprof or fprof。
bxjv4tth3#
通常的方法是使用timer:tc。Here是很好的解释。
igsr9ssn4#
我可以向您推荐此工具:https://github.com/virtan/eep
结果将得到类似于https://raw.github.com/virtan/eep/master/doc/sshot1.png的结果。
分析正在运行的系统上所有进程的分步说明:
在目标系统上:
在桌面上: