是否有关于Perl 5.10.0中性能回归有多糟糕的基准?

时间:2010-07-28 14:18:12

标签: perl performance

我目前在高可用性环境中工作,因此这家公司的性能有点问题。我今天发现它们运行的​​是Perl 5.10.0,根据perl5101delta,它在列表赋值中有性能回归。现在,因为我们使用的是Debian,所以更新并不容易,所以我正在寻找统计数据,以便为我们更新提供多少改进。

1 个答案:

答案 0 :(得分:7)

其他人的代码基准测试只会显示这些其他人的代码有何不同。

我假设您已经使用了许多基准来量化“高可用性环境”的性能,这可能会显示当前可以对特定页面执行的请求数(对于网站而言) )或重要模块中特定高可见性子程序的子程序调用次数。

如果您还没有这样的东西,我会建议创建一些跟踪系统当前性能的代码,特别是对于您认为最高调或性能下降的位会对公司产生负面影响。

请记住,很多代码可能是IO绑定的,并且您所指的回归可能与之相关:它关注列表分配,因此它影响大多数子例程调用和参数杂乱。如果您最宝贵的代码花费很长时间等待数据库报告数据,则上述回归对您来说应该可以忽略不计。

一种很好的方法,可以找出哪种方法对您自己的代码进行基准测试并测量其当前的性能。

一旦你拥有了这个,并且与你想要迁移的特定版本完全无关,你就可以安装任何你想迁移到App :: perlbrew的版本,安装您需要使用App :: cpanm获得基准测试的模块,然后“简单地”运行您的基准测试/测试套件。

作为一个额外的好处,您还可以跟踪Perl的开发版本,并为perl5-porters提供有价值的反馈,以便在此之前可以修复之前的下一个主要版本。

尽管perl5-porters确实很长,以确保现有代码不会中断,但每次主要版本都会对这些弃用做出明智的处理等等。事情确实会破坏,并且知道它们是否会破坏的唯一方法对于你自己的代码来测试它。

补充:为了解决具体问题,关于Perl的“列表分配中可衡量的性能下降”回归,您可以通过perlbrew安装各种Perls并使用以下方式对其进行基准测试:

use Benchmark qw/:all/;
sub test_this {
  my ($a,$b,@c) = @_;
  1;
}
timethis(10_000_000, "test_this(1..10);");

为Perl 5.10和Perl 5.10.1或其他perls执行此操作并查看。

对于我的机器,5.10.1产生540k / sec,而5.10.0产生498k / sec。