通过跟踪,Erlang程序更快

时间:2013-03-27 09:23:38

标签: performance erlang

我正在对程序进行一些评估测量,以测试执行时间以及检查原始系统执行的跟踪器如何影响原始系统的性能。跟踪程序干扰系统,除了接收跟踪消息之外,它们之间不进行任何通信。

到目前为止,我得到的结果是没有开启跟踪的程序的953.14微秒的平均值,与跟踪开启时的937微秒相比。时间是使用statistics(wall_clock)函数计算的。

我的想法是,由于我有一个来自跟踪器的额外进程,并且跟踪机制需要它们自己的处理能力,它会减慢系统速度而不是加速它。有没有任何已知的原因可能发生这种情况?

1 个答案:

答案 0 :(得分:1)

你有一次或几次运行这项措施吗?当您使用wall_clock时,您将在此测量中包括对环境的潜在扰动,等待消息......,并且您不评估CPU时间。下面的例子显示了它:

1> F = fun() -> receive _ -> ok after 5000 -> timout end end.
#Fun<erl_eval.20.111823515>
2> F().
timout
3> statistics(wall_clock),F(),statistics(wall_clock).       
{965829,5016}
4>

功能F显然不需要5秒的CPU时间,但只等待5秒钟。

这意味着您应该多次使用该度量,通常不要使用可能包含加载模块代码所需时间的第一个执行时间,并注意环境 - 在其上运行的其他进程是什么机器,并确保测量的时间不是等待状态的结果。

如果使用runtime而不是wall_clock,则应该看到所需的CPU时间,因此在跟踪代码时会增加时间。请注意,多核的使用可能会隐藏这种时间的增加。